调用保留属性时TableViewController崩溃了吗?

时间:2011-01-07 22:08:27

标签: ios objective-c iphone tableview

我有一个表视图控制器,在初始化过程中,我设置了一个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;
}

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

这是问题所在:

dataList = [NSPropertyListSerialization propertyListFromData ...

此功能不以alloccopyretain开头,因此会返回自动释放的对象。但是,您需要保留它以使其保持不变。

您有两种选择:

self.dataList = [NSPropertyListSerialization propertyListFromData ...

,或者

dataList = [[NSPropertyListSerialization propertyListFromData ...] retain];