CoreData的内存管理问题

时间:2013-05-24 04:26:44

标签: objective-c xcode core-data memory-management autorelease

注意:由于票数太多,这个问题已完全重组。

我正在使用带有核心数据的NSFetchedResults显示UITableViewController。 它显示正常,但是当我按下一个新的视图控制器并且用户使用后退按钮导航回UITableView时,它会因该错误而崩溃。

我已经和我斗争了好几个星期而且还没弄明白为什么。我可以说它可能与内存管理有关但我无法在任何地方找到它。

更新:使用Instruments-Zombies我发现事实上它在CoreData上崩溃了 - prepareResultsForResultsSet。见图 enter image description here 这是我的FetchedResultsController

中的代码
- (NSFetchedResultsController *)fetchedResultsController {

NSManagedObjectContext *thecontext;
thecontext = [(Logix_AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];

if (fetchedResultsController != nil) {
    return fetchedResultsController;
}

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"TimeOff" inManagedObjectContext:thecontext];
[fetchRequest setEntity:entity];
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"timeOffStartDate" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
[fetchRequest setFetchBatchSize:20];
NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:thecontext sectionNameKeyPath: @"timeOffType" cacheName:nil];
self.fetchedResultsController = theFetchedResultsController;
fetchedResultsController.delegate = self;
[sort release];
[fetchRequest release];
[theFetchedResultsController release];
return fetchedResultsController;    
}

1 个答案:

答案 0 :(得分:3)

您可以从Xcode复制/粘贴实际错误吗?并且发生崩溃的地方的回溯,如果有的话?

你绝对不应该autorelease +imageNamed:返回的对象;该对象已经自动释放。


您的评论:

  

iVacationTimeApp [47892:19d03] - [CFString respondsToSelector:]:发送到解除分配的实例0x95c9140的消息

有你的答案。你有一个过度发布的对象。可能是image,可能是别的。打开仪器中的Zombie检测并再次运行。

相关问题