Должен ли я проверить, существует ли файл по заданному пути при попытке чтения данных в объект NSData
? Прямо сейчас я не делаю в данный момент, но мой код работает, так как мой массив, который должен быть заполнен данными из файла, будет установлен в nil, и я могу позже в своем приложении проверить, равен ли этот массив нулю. Но я думаю, что код, возможно, «уродлив» и будет работать лучше, если бы я сделал чек (например, тот, который был прокомментирован).Objective-C NSData initWithContentsOfFile, проверьте, существует ли файл?
NSData *codedData = [[NSData alloc] initWithContentsOfFile:[CareersParser dataFilePath]];
/*
if (codedData != nil) {
//do the below (not commented out code)
} else {
//file doesn't exist at the given path
[codedData release];
return nil;
}
*/
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:codedData];
NSArray *careers = [unarchiver decodeObjectForKey:kDataKey];
[unarchiver finishDecoding];
NSMutableArray *ids = [[NSMutableArray alloc] init];
for (Career *career in careers) {
[ids addObject:[career id]];
}
// Sort the array in an orderly fashion
NSArray *sortedIds = [ids sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
// Release allocated memory
[ids release];
[unarchiver release];
[codedData release];
return sortedIds;
Как будет происходить ситуация гонки при использовании метода fileExistsAtPath? –
Первый пример, о котором я могу думать, - это если вы используете 'fileExistsAtPath', чтобы убедиться, что ваша структура каталогов настроена, например. 'Documents/myAppFiles/test.txt' после получения' YES' вы можете быть счастливы и продолжить и сохранить файл. Возможно, что между вашим чеком и операцией сохранения, с которой может появиться фоновый поток, и удалением структуры каталогов, на которую вы полагаетесь, что приведет к тому, что ваш файл не будет сохранен. В документах Apple есть дополнительная информация http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html. –