我正在将文件加载到NSMutableArray
。我是这样做的:
if(!self.dataArray){
self.dataArray = [[NSMutableArray alloc] init];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *arrayPath = [[paths objectAtIndex:0]
stringByAppendingPathComponent:@"array.out"];
self.dataArray = [NSMutableArray arrayWithContentsOfFile:arrayPath];
}
加载到文件中的数组包含多个NSDictionaries
。
但是,这会以某种方式释放内存中的数组,因为在执行此操作后我记录dataArray
时会记录nil
。怎么样?
更新
我已经发现[NSMutableArray arrayWithContentsOfFile:arrayPath]
正在记录为nil,因为我将内容上传到文件的代码没有创建文件:
// write data to disk
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *arrayPath = [[paths objectAtIndex:0]stringByAppendingPathComponent:@"array.out"];
[self.dataArray writeToFile:arrayPath atomically:YES];
NSLog(@"uploaded file: %@", arrayPath); // logs an arrayPath, but one that doesn't exists.
答案 0 :(得分:1)
检查以下内容,
使用
检查文件是否存在于路径中[[NSFileManager defaultManager] fileExistsAtPath:arrayPath];
通过记录来验证文件是否包含预期内容。
确认文件内容被组织为属性列表(plist)。在plist editor / Xcode中验证它。
如果您动态创建它,请检查您要写入的路径。
确认将 NSArray 写入plist的方法。使用
[array writeToFile:path atomically:YES];
注意:强>
如果您正在动态创建文件,并且您正在模拟器上进行测试;您可以 通过记录文件路径找到该文件,并在Finder上跟踪它。
物业清单参考
答案 1 :(得分:0)
根据Apple文档,如果无法打开文件或者无法将文件内容解析为数组,则数组返回nil。
您是否使用[writeToFile:atomically:]方法将数组写入文件?
此外,请确保filePath字符串在写入和读取两端完全匹配。当我发现我拼错了文件的名称或使用了错误的文件扩展名时,我浪费了很多时间来寻找一个bug。
另一种可能性:您确认此代码正在执行吗?有时我必须在if条件下将(!self.someProperty)更改为(self.someProperty!= nil)以获取此类代码才能运行。
答案 2 :(得分:0)
Peter Segerblom和wildBillMunson是对的:如果无法打开文件或者无法将其内容解析为数组,则数组返回nil。
你说“array.out”是一个NSDictionaries数组。每当我拥有那组数据时,我就会使用plist类型的文件并以这种方式读取它:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
NSString *directory = [paths objectAtIndex:0];
NSString *fullPath = [directory stringByAppendingPathComponent:@"data.plist"];
NSString *errorDesc = nil;
NSPropertyListFormat format;
NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:fullPath];
NSArray *data = (NSArray *)[NSPropertyListSerialization propertyListFromData:plistXML mutabilityOption:NSPropertyListMutableContainersAndLeaves format:&format errorDescription:&errorDesc];
务必检查fullPath
是否未返回nil。
希望这有帮助!