我试图在用户第一次启动应用程序时将少量属性保存到plist中,然后当用户重新启动应用程序时,我必须检索这些数据并将其显示给用户,这样我就不会不得不再次要求相同的数据。
我猜这应该是非常直接的,但可能是我错过了一些东西。
如果有人能指出我做同样事情的示例代码,那将是很好的,如果代码保存并从字典中检索数据到plist以及从plist到字典,那将会很好。
我查看了Apple Property List Programming指南,并使用了阅读和写入属性列表数据中的代码
但是,当我重新启动我的应用程序时,我没有收回我存储的数据。
*的 修改 *
我正在添加一些代码,以便有人可以指出我是否犯了任何错误。
我在项目资源文件夹中创建了一个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”时它是空的
答案 0 :(得分:0)
-[NSDictionary writeToFile:atomically:]
会返回YES
或NO
,具体取决于是否成功。你在检查返回值吗?
如果我不得不猜测,我会说这是因为您正在将文件写入应用程序包中。你应该把它写在文件系统的其他地方; ~/Library/Application Support/<application name>
是通常的位置。
修改强>
您可以使用以下内容检查返回值:
BOOL success = [dict writeToFile:finalPath atomically:YES];
if (!success) {
NSLog(@"Could not write file");
}