在尝试将数据读入NSData
对象时,是否应检查给定路径中是否存在文件?现在我不是在做,但我的代码工作,因为我的数组应该被填充来自文件的数据将被设置为nil我可以稍后在我的应用程序中检查该数组是否为零。但我认为代码可能“丑陋”,如果我做了检查(如注释代码中的那个),它会更好用。
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;
答案 0 :(得分:2)
对我来说这似乎是明智的,我会颠倒if语句以废除else子句。
if (nil == codedDate) {
[codedData release];
return nil;
}
... Do the rest of your code
Apple建议您here尝试执行操作,例如按照您的建议加载数据。只要您不尝试[[NSManager defaultManager] fileExistsAtPath:path]
,您就不会引入竞争条件。
答案 1 :(得分:1)
你没有,这可能引入一场比赛,所以它会更“丑陋”。如果读取失败,请检查 codedData 是否为nil。