Iphone plist作为持久存储,用于在关闭和重新启动应用程序之间存储和检索数据

Iphone plist作为持久存储,用于在关闭和重新启动应用程序之间存储和检索数据,iphone,plist,Iphone,Plist,当用户第一次启动应用程序时,我试图将一些属性保存到plist中,然后当用户重新启动应用程序时,我必须检索这些数据并将其显示给用户,这样我就不必再次请求相同的数据 我猜这应该是非常直截了当的,但可能是我遗漏了什么 如果有人能为我指出一个做同样事情的示例代码,那就太好了。如果代码能将数据从dictionary保存到plist,从plist保存到dictionary,那就太好了 我查阅了Apple Property List编程指南,并使用了读取和写入Property List数据的代码 但是,当我重

当用户第一次启动应用程序时,我试图将一些属性保存到plist中,然后当用户重新启动应用程序时,我必须检索这些数据并将其显示给用户,这样我就不必再次请求相同的数据

我猜这应该是非常直截了当的,但可能是我遗漏了什么

如果有人能为我指出一个做同样事情的示例代码,那就太好了。如果代码能将数据从dictionary保存到plist,从plist保存到dictionary,那就太好了

我查阅了Apple Property List编程指南,并使用了读取和写入Property List数据的代码

但是,当我重新启动我的应用程序时,我无法取回我存储的数据

*编辑*

我正在添加一些代码,以便有人可以指出我是否犯了任何错误

我在我的项目资源文件夹中创建了一个plist文件Data.plist

这就是我在一个视图控制器中保存数据的方式

    NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"Data.plist"];
//NSString *error;

NSMutableDictionary *dict = [NSMutableDictionary dictionary];


[dict setObject:@"xxxxxx" forKey:@"phoneNumber"];
[dict setObject:@"password" forKey:@"password"];
[dict setObject:@"email" forKey:@"email"];

[dict writeToFile:finalPath atomically:NO];
这就是我在同一视图控制器viewDidLoad方法上读取数据的方式,因为我想在下次应用程序启动时加载数据

    NSDictionary *dictionary;

// read "Data.plist" from application bundle
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"Data.plist"];
dictionary = [NSDictionary dictionaryWithContentsOfFile:finalPath];

// dump the contents of the dictionary to the console
for (id key in dictionary) {
    NSLog(@"bundle: key=%@, value=%@", key, [dictionary objectForKey:key]);
}   
在保存到文件之前,我可以在gdb做po dict,并且可以看到文件中有数据

NSLog打印以下错误

断言失败:cls,函数getName,文件/SourceCache/objc4_Sim/objc4-427.1.1/runtime/objc runtime new.m,第3939行

因为当我在gdb加载数据并执行po dictionary时,它是空的

-[NSDictionary writeToFile:Atomicaly:]根据是否成功返回是或否。你在检查返回值吗

如果让我猜一猜,我会说这是因为您正在将文件写入应用程序包。你应该把它写在文件系统的其他地方~/库/应用程序支持/是通常的位置

编辑:

您可以使用以下内容检查返回值:

BOOL success = [dict writeToFile:finalPath atomically:YES];
if (!success) {
    NSLog(@"Could not write file");
}

[dict writeToFile:最终路径原子:否];当我写这个语句时,我必须指定“否”或“是”,不是吗?我如何检查返回值是多少。但如果我把它写到文件系统,它会是iphone文件系统吗?我应该给出的路径是~/Library/Application Support/在iphone中也可用,因为最后应用程序必须转到iphone。我更新了答案,以显示如何检查返回值。另外,如果这是针对iPhone的,你应该用iPhone或cocoa touch标记它,而不是cocoa。谢谢,我检查了成功的值是真的,这意味着日志没有打印出来,这意味着数据写在文件中实际上其他用户制作的标记有cocoa,我没有这样做