I have a UITableView I’m populating with data from CoreData. I have a data access class I call a method on to get the array of data to populate the table with. In that method I have something like this:
NSArray *fetchedArray = [context executeFetchRequest:request error:&error];
I was just returning this array directly, but was getting an error in my view controller when I try to set its local property that holds the returned array
@property (nonatomic, retain) NSArray *listData;
and
@synthesize listData; // <-- error here -[CFNumber release]: message sent to deallocated instance...
respectively.
It seemed like the ‘retain’ in my @property was trying to release the previous listData array, which seemed to have already been released (or, more likely an object in the array or one of its properties had been released).
So in my data access class I added the following after the fetchedArray is produced by the context:
NSMutableArray *listArray = [[[NSMutableArray alloc] init] autorelease];
for (Response *item in fetchedArray) {
[listArray addObject:item];
}
return listArray;
But I still get the same error in the @synthesize listData back in the view controller. It doesn’t happen the first time usually, but after tapping through to the detail controller and then going back to the list and then reloading the list with different data (e.g. filtering based on user input which calls the data access method to return an updated list – hence the error in the setter for listData).
I’m not entirely sure if my problem is memory management related or related to something I’m not understanding about what the context returns. It’d be nice if a fetch request returned data that didn’t get released when I think I’ve retained it. 🙁
EDIT Note that given the answer, the title of the question may be a bit misleading.
Ah – just had to think it through a bit more. My problem was that I was assigning one of the objects in the array to a property on the detail controller, but calling release on that property in my detail controller’s dealloc.
After changing
@property (nonatomic, assign)to@property (nonatomic, retain)it doesn’t crash. Yay. Sooo looking forward to ARC.