保存数据 - 适用于模拟器,而不是设备

时间:2010-04-21 04:02:53

标签: iphone uiviewcontroller nsdata nsfilemanager uiapplicationdelegate

我使用NSData在我的应用程序中保留图像。我保存了这样的图像(在我的App代表中):

- (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");
}

此代码每次都在模拟器上运行,但在设备上,它似乎永远不会在图像中加载。我很确定它可以保存,但我没有文件系统的视图。

我做了一些奇怪的事吗?模拟器是否有不同的方式访问其目录而不是设备?

谢谢!

1 个答案:

答案 0 :(得分:4)

啊哈!钉了它!

我正在写这个,所以别人拉他们的头发不会坐在那里盯着代码,想知道为什么它不起作用:)

问题在于这一行:

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

它应该是这样的:

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

原因是,如果没有它,你会得到/Files/Documentslastimage.png而不是/Files/Documents/lastimage.png的内容,因为附加的路径组件会为你处理斜杠。我希望将来可以帮助别人!