2015-06-03 56 views
0

下面的代码适用于iOS < 8很大,但不会在Xcode 6.1.1和iOS 8设备模拟器保存的UIImage与模拟器IOS盘8不起作用

NSData *imageData = UIImagePNGRepresentation(shareSnapshot); 
[imageData writeToFile:@"/Users/MyUser/Desktop/123.png" atomically:YES]; 

有谁工作知道这是一个模拟器问题,我没有一个真正的设备与ios8检查。

+0

你没有一个真正的磁盘路径。 –

回答

0

所以你在这里遇到了许可问题。我不知道为什么之前8.0的工作,但我看到的(东西清楚地改变):

操作无法完成。 (可可错误513)

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ErrorHandlingCocoa/ErrorObjectsDomains/ErrorObjectsDomains.html#//apple_ref/doc/uid/TP40001806-CH202-CJBGAIBJ

既然这样,你会在实际设备上运行时遇到问题。处理此问题的更好方法是将数据保存到应用程序的文档目录中。

  1. 取通过NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)的目录路径
  2. 使用stringByAppendingPathComponent

然后,您可以验证它是通过访问模拟器应用程序目录妥善保存追加文件名:

  • /Users/user/Library/Developer/CoreSimulator/Devices //文档/
+0

我试过结果是一样的,下面的IOS 8工作正常,但不是与IOS 8和 –

+0

你当然有权写入文档目录。你可能想建立一个小样本项目,只是这样做。随意将这个示例推送到Github,我很乐意在这方面进行测试。 –

0

我记得由于安全性和沙箱原因,你不能给iOS提供类似“/ Users/MyUser/Desktop /”的路径。

退房

NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

文件找到一个合适的位置

NSSearchPathDirectory定义有很多,你可以使用路径。希望这个帮助

0
UIGraphicsBeginImageContext(self.frame.size); 
[self.layer renderInContext:UIGraphicsGetCurrentContext()]; 

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

// Now I use the "screenshot" 
NSString *path = [NSHomeDirectory() stringByAppendingString:@"/image.jpg"]; 
if ([UIImageJPEGRepresentation(image, 1) writeToFile:path atomically:YES]) { 
    NSLog(@"save ok"); 
} 
else { 
    NSLog(@"save failed"); 
} 
0

试试这个。

雨燕3.0

// Create path. 
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) 
let filePath = "\(paths[0])/MyImageName.png" 
// Save image. 
UIImagePNGRepresentation(image)?.writeToFile(filePath, atomically: true)