我已經閱讀了幾個處理類似問題的線程,但我無法弄清楚我過度釋放了什麼。從一個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