我无法调试NSInvalidArgumentException。我最近的怀疑是,我没有正确地保留从plist中读取的数据,以便在我访问它时被其他对象占用。
我的plist结构非常复杂,它有8级数组/字典。我想当我尝试访问最低的对象时,我失去了记忆。
我想知道在读取plist文件时是否必须保留每个数据元素,还是只保留顶级对象就足够了?
这就是我的阅读方式:
NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath];
NSError *error = [[[NSError alloc] init] autorelease];
NSArray *temp = (NSArray *)[[NSPropertyListSerialization
propertyListWithData:plistXML
options:NSPropertyListMutableContainersAndLeaves
format:nil
error:&error] retain];
self.dataPackage = [temp objectAtIndex:0];
dataPackage
声明为:
@interface rootViewController:UIViewController{
NSDictionary *dataPackage;
}
@property (retain) NSDictionary *dataPackage;
并合成:
@synthesize dataPackage;
我做得对吗?
由于
利奥
答案 0 :(得分:2)
我发现了三件事:
您无需创建NSError对象!如果出现故障,NSPropertyListSerialization将返回错误对象。只需初始化:NSError *error = nil;
您不必保留(自动释放)临时数组,在索引0处获取对象后,您显然不需要整个数组。
[temp objectAtIndex:0]
会崩溃!
请务必使用self.dataPackage = nil
在dealloc中释放属性var。从内存管理的角度来看,一切都是安全的。
答案 1 :(得分:0)
请在TextEdit中查看Plist的结构....有关更多信息,请查看我的previous post如果您使用的是Xcode 4,那么这可能就是原因。结构可能在xcode 4中发生了变化。