我有一个UITableView我从CoreData填充数据。我有一个数据访问类,我调用一个方法来获取要填充表的数据数组。在这个方法中,我有这样的内容:
NSArray *fetchedArray = [context executeFetchRequest:request error:&error];
我只是直接返回这个数组,但在我的视图控制器得到一个错误,当我试图设置它的本地属性持有返回的数组
@property (nonatomic, retain) NSArray *listData;
和
@synthesize listData; // <-- error here -[CFNumber release]: message sent to deallocated instance...
。
我的@property中的'retain'似乎试图释放先前的listData
数组,该数组似乎已经被释放(或者,更可能是数组中的对象或其属性之一已被释放)。
因此,在我的数据访问类中,我在上下文生成fetchedArray
之后添加了以下内容:
NSMutableArray *listArray = [[[NSMutableArray alloc] init] autorelease];
for (Response *item in fetchedArray) {
[listArray addObject:item];
}
return listArray;
但我仍然得到相同的错误在@synthesize listData
回到视图控制器。它通常不会第一次发生,但是在点击细节控制器之后,然后回到列表,然后用不同的数据重新加载列表(例如,基于用户输入的过滤,调用数据访问方法返回一个更新的列表-因此在listData
的setter中出现错误)。
我不完全确定我的问题是否与内存管理相关或与我不了解上下文返回的内容相关。如果取回请求返回的数据没有被释放,而我认为我保留了数据,那就好了。(
编辑请注意,给出的答案,问题的标题可能有点误导。
啊——只是需要再考虑一下。我的问题是,我将数组中的一个对象分配给详细控制器上的一个属性,但在详细控制器的dealloc中调用该属性的释放。
将@property (nonatomic, assign)
更改为@property (nonatomic, retain)
后不会崩溃。耶。