0

我创建了一个使用 propertylist 序列化到文件中的应用程序。我从用户那里收到一些报告,说保存的数据有时会丢失。下面的代码有问题吗?

也许如果文件确实存在但被阻止并fileExistsAtPath:返回NO,因此它被重新创建?

NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
plistPath = [rootPath stringByAppendingPathComponent:@"BookmarkData.plist"];

if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath])
{
    [[NSFileManager defaultManager] createFileAtPath:plistPath contents:nil attributes:nil];
}
4

2 回答 2

2

您没有显示调用该代码的位置。没有那个,没有办法确定。

如果您仅在应用程序终止时这样做,那么这可能是间歇性数据丢失的原因。我们永远无法保证您的应用程序将以任何友好、受控的方式终止。用户可能会强制终止,设备可能会重置,应用程序可能会崩溃,等等……等等……

于 2013-09-03T16:27:15.397 回答
0

检查文件是否存在的 API 通常返回真或假。False 通常意味着该文件不可访问,而不是它不存在。因此,例如,如果文件存在于文件共享中,但您没有读取权限,它将返回 false。例如,如果另一个线程或用户已经打开了文件,则可能相同。

显然,在 iOS 上,其中一些原因不太可能发生,但可能会发生类似的事情。

于 2013-09-03T15:44:39.067 回答