【发布时间】:2010-04-21 04:02:52
【问题描述】:
我使用 NSData 将图像持久保存在我的应用程序中。我像这样保存图像(在我的 App Delegate 中):
- (void)applicationWillTerminate:(UIApplication *)application
{
NSLog(@"Saving data");
NSData *data = UIImagePNGRepresentation([[viewController.myViewController myImage]image]);
//Write the file out!
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path_to_file = [documentsDirectory stringByAppendingString:@"lastimage.png"];
[data writeToFile:path_to_file atomically:YES];
NSLog(@"Data saved.");
}
然后我像这样加载它(在我的视图控制器中,在viewDidLoad 下):
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path_to_file = [documentsDirectory stringByAppendingString:@"lastimage.png"];
if([[NSFileManager defaultManager] fileExistsAtPath:path_to_file])
{
NSLog(@"Found saved file, loading in image");
NSData *data = [NSData dataWithContentsOfFile:path_to_file];
UIImage *temp = [[UIImage alloc] initWithData:data];
myViewController.myImage.image = temp;
NSLog(@"Finished loading in image");
}
此代码每次在模拟器上都有效,但在设备上,它似乎永远无法重新加载到图像中。我很确定它可以保存,但我看不到文件系统。
我在做一些奇怪的事情吗?模拟器访问其目录的方式是否与设备不同?
谢谢!
【问题讨论】:
-
这和权限管理有关系吗?
-
什么样的权限管理?模拟器是否在某种与权限相关的方式上与设备不同?感谢您的回复!
-
好吧,我不是 iPhone 开发人员,但我听说 iPhone 的限制非常严格……而您的台词“很确定它可以节省”- 是吗?我看到你确实有一个 NSLog,但如果没有,它应该返回一个错误。
标签: iphone uiviewcontroller nsdata nsfilemanager uiapplicationdelegate