2013-09-03 2 views
0

Я создал приложение, которое использует сериализацию списка свойств в файл. Я получаю несколько отчетов от пользователей, которые иногда теряют данные. Что-то не так с кодом ниже?Безопасный доступ к файлам в iOS

Возможно, если файл действительно существует, но заблокирован и 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]; 
} 
+0

Что значит «заблокирован»? – trojanfoe

+4

Обновите свой вопрос и покажите нам, как вы на самом деле пишете данные. – DarkDust

+0

Распечатайте переменные через NSLog(), чтобы проверить результат. – Itachi

ответ

0

Api, проверяющий наличие файлов, обычно возвращает true или false. False обычно означает, что файл доступен для доступа не так, как он не существует. Так, например, если файл существовал в общем доступе к файлу, но у вас не было права на чтение, он возвращал бы false. Это может быть то же самое, если другой поток или пользователь уже открыли файл, например.

Очевидно, что на iOS некоторые из этих причин маловероятны, но что-то подобное может произойти.

2

Вы не показываете , где вы вызываете этот код. Без этого нельзя точно сказать.

Если вы делаете это только при завершении приложения, то это, вероятно, является причиной прерывистой потери данных. Никогда не гарантируется, что ваше приложение будет прекращено в любом виде дружественной, контролируемой, манеры. Пользователь может принудительно прекратить работу, устройство может перезагрузиться, приложение может аварийно завершить работу, и т.д.etc.etc ...

Смежные вопросы