【发布时间】:2014-01-05 18:34:34
【问题描述】:
如何在执行其他操作之前等待 plist 写入操作完成?
// Write plist file
NSString *pathToPlist = [NSString pathWithComponents:@[[Util documentsDirectoryPath], @"Settings.plist"]];
NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithContentsOfFile:pathToDocumentsPlist];
[dic setObject:@"SomeObject" @"SomeKey"];
[dic writeToFile:pathToDocumentsPlist atomically:YES];
// Read plist file
NSDictionary *updatedDictionary = [NSDictionary dictionaryWithContentsOfFile: pathToPlist];
在这种情况下,我希望 updatedDictionary 具有更新后的 plist 的值,但是 plist 写入方法 (writeToFile) 似乎是异步的,并且需要很长时间才能完成。结果,updatedDictionary 倾向于读取旧配置,而不是更新配置,因为到 plist 读取时,保存操作尚未完成。
如何解决这个问题?只是纯粹的猜测,设置atomically:NO 可能有帮助吗?谢谢!
【问题讨论】:
-
writeToFile:atomically:是同步的,并在方法返回时完成。您发布的代码读取的路径与您写入的路径不同。 -
pathToPlist和pathToDocumentsPlist似乎都指向同一条路径,尽管它们是 2 个NSString对象,但这有关系吗? -
pathToDocumentsPlist是较早创建的NSString,pathToPlist是后来单独创建的。如果writeToFile:atomically:是同步的,我会尝试自己找出问题所在。谢谢:) -
您正在向 NSMutableDictionary 发送消息未知“writeToFile”,因为“writeToFile”方法仅在 NSData 中可用。这是笔误吗?
标签: ios iphone objective-c plist