安全地访问iOS中的文件

时间:2013-09-03 13:49:27

标签: ios objective-c

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

也许如果文件确实存在但被阻止且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];
}

2 个答案:

答案 0 :(得分:2)

您没有显示 where 您调用该代码。没有它,没办法确定。

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

答案 1 :(得分:0)

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

显然在iOS上,其中一些原因不太可能,但可能会出现类似情况。