如何正确保留从plist读取的数据?

时间:2011-08-30 12:32:41

标签: iphone cocoa-touch ipad plist

我无法调试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;

我做得对吗?

由于

利奥

2 个答案:

答案 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中发生了变化。