我有一个表视图控制器,在初始化过程中,我设置了一个NSArray属性,然后在cellForRowAtIndexPath
方法中使用该属性来显示表中的数据。
但是,当我触摸一行时,一旦我调用此保留的NSArray属性,它就会显示EXC_BAD_ACCESS!
仅供参考,该属性的定义如下所示,并使用自定义的getter函数:
@property (nonatomic,retain) NSArray *dataList;
并在.m文件中:
@synthesize dataList;
- (NSArray *)dataList
{
if (!dataList)
{
NSString *p = [kind lowercaseString];
NSString *s = [[NSBundle mainBundle] pathForResource:p ofType:@"txt"];
NSLog(@"%@",s);
NSData *dataRep = [NSData dataWithContentsOfFile:s];
NSPropertyListFormat format;
dataList = [NSPropertyListSerialization propertyListFromData: dataRep
mutabilityOption: NSPropertyListImmutable
format: &format
errorDescription: nil];
if (dataList.count == 0)
NSLog(@"Fetch failed!");
}
return dataList;
}
有什么建议吗?
答案 0 :(得分:3)
这是问题所在:
dataList = [NSPropertyListSerialization propertyListFromData ...
此功能不以alloc
,copy
或retain
开头,因此会返回自动释放的对象。但是,您需要保留它以使其保持不变。
您有两种选择:
self.dataList = [NSPropertyListSerialization propertyListFromData ...
,或者
dataList = [[NSPropertyListSerialization propertyListFromData ...] retain];