保存数据 - 在模拟器上工作,而不是在设备上工作

Posted

技术标签:

【中文标题】保存数据 - 在模拟器上工作,而不是在设备上工作【英文标题】:Saving data - does work on Simulator, not on Device 【发布时间】: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,但如果没有,它应该返回一个错误。 【参考方案1】:

啊哈!成功了!

我写这篇文章是为了让其他人不会坐在那里盯着代码,想知道为什么它不起作用:)

有问题的行是这一行:

NSString *path_to_file = [documentsDirectory stringByAppendingString:@"lastimage.png"];

应该是这样的:

NSString *path_to_file = [documentsDirectory stringByAppendingPathComponent:@"lastimage.png"];

这样做的原因是,如果没有它,您将得到类似于 /Files/Documentslastimage.png 而不是 /Files/Documents/lastimage.png 的内容,因为附加的路径组件会为您处理斜线.我希望这对将来的其他人有所帮助!

【讨论】:

以上是关于保存数据 - 在模拟器上工作,而不是在设备上工作的主要内容,如果未能解决你的问题,请参考以下文章

facebook在模拟器上工作而不是在设备上

在模拟器上工作,而不是在设备或其他模拟器上工作。设定的目标是正确的[关闭]

iOS 通用应用程序链接在模拟器上工作,而不是在真实设备上

精灵出现在模拟器中,而不是在设备上

iOS App 在模拟器上运行而不是在设备上运行?

在模拟器中而不是在设备中更新位置