我已经阅读了几个处理类似问题的线程,但我无法弄清楚我过度释放了什么。从一个Player对象的详细视图控制器,我推一个UITableViewController以选择播放器位置的对象:第二次保存NSManagedObjectContext时出错(解除分配的insance)
- (void)selectLocations
{
LocationSelectionController *vc = [[LocationSelectionController alloc] initWithStyle:UITableViewStyleGrouped];
vc.player = player;
[self.navigationController pushViewController:vc animated:YES];
[vc release];
}
这里看看LocationSelectionController的一些细节:
- (void)saveContext {
NSManagedObjectContext *context = [player managedObjectContext];
if ([context hasChanges]) {
NSError *error = nil;
if (![context save:&error]) { //*** ERROR HERE ***
// show alert
}
}
}
- (void)viewDidLoad {
[super viewDidLoad];
// ....
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error]) {
// show alert
}
}
- (NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSManagedObjectContext *context = [player managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Location" inManagedObjectContext:context];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
NSFetchedResultsController *aFRC = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
aFRC.delegate = self;
self.fetchedResultsController = aFRC;
[request release];
[sortDescriptor release];
return _fetchedResultsController;
}
- (void)viewDidUnload {
[super viewDidUnload];
self.fetchedResultsController = nil;
}
- (void)dealloc {
self.fetchedResultsController = nil;
[_fetchedResultsController release];
[player release];
[super dealloc];
}
的功能第一次导航到LocationSelectionController时总是非常完美。我可以与Location对象进行交互,完全没有问题。当我弹出视图并返回到Player对象的详细视图时,再次有完美的功能。只有当我再次推送LocationSelectionController(即使它来自不同的Player对象),才会尝试保存上下文时发生崩溃。
*** -[LocationSelectionController controllerWillChangeContent:]: message sent to deallocated instance 0x7026920
我一直在使用的仪器与NSZombie发现问题试过了,它指向我LocationSelectionController的一个实例。
你是我的英雄。谢谢你的回复! – 2011-04-09 20:22:45
亲爱的Anomie,我的应用程序出现类似的问题。你可以在这里检查我的代码,看看你是否注意到了什么?谢谢! http://stackoverflow.com/questions/5815549/getting-an-nsinvalidarguementexception-error – 2011-04-28 09:11:52