核心数据应用程序在保存数据时崩溃

iPr*_*mer 4 iphone core-data

我正在使用Core数据在数据库中输入歌曲详细信息.我有3个视图..首先是选择歌曲名称及其详细视图以保存数据库中的详细信息..第三个视图是显示已保存的歌曲..我的应用程序正在保存数据,有时会提供异常.

我发现什么时候是异常.如果我选择歌曲并将其保存在数据库中,则可以正确保存.但是当我第一次去第3视图时.Songlistviewcontroller然后打开歌曲并尝试保存它的详细信息它在保存行上给出例外..

011-11-04 11:14:10.578 SongsWithLyrics [259:207] * - [SongsListViewController controllerDidChangeContent:]:发送到解除分配的实例0x5b73b50的消息

这是我保存歌曲的代码

//save song details
- (IBAction)saveDetails:(id)sender {

    NSError *error;
    self.song = [NSEntityDescription insertNewObjectForEntityForName:@"Song" inManagedObjectContext:managedObjectContext];


    [song setValue:songTitleString forKey:@"songTitle"];
    [song setValue:albumNameText.text forKey:@"albumName"];
    [song setValue:artistNameText.text forKey:@"artistName"];
    [song setValue:albumGenreText.text forKey:@"albumGenre"];
    [song setValue:UIImagePNGRepresentation(artworkImageview.image) forKey:@"artworkImage"];


    if (![managedObjectContext save:&error])
    {
        NSLog(@"Problem saving: %@", [error localizedDescription]);
    }



    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Saved" message:@"" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
    [alert show];
    [alert release];

    [self.navigationController popViewControllerAnimated:YES];




}
Run Code Online (Sandbox Code Playgroud)

我坚持这个问题..并且无法理解为什么会发生这种情况.

之前我的应用程序流程是.. SongsListviewController-> Songs-> SaveSongs

它工作得很好..为此.

请帮忙

Ste*_*eve 6

Core Data可以通过几种有趣的方式"偷偷摸摸",并可以继续引用不再存在的东西.

在这种情况下,NSFetchedResultsController是嫌疑人.

您设置了NSFetchedResultsController的委托 - 后来得到了更新 - 除了您的委托实例不再处理该更新.

一些背景:

如果为获取的结果控制器设置委托,则控制器将注册以从其受管对象上下文接收更改通知.将处理影响结果集或部分信息的上下文中的任何更改,并相应地更新结果.控制器在结果对象更改位置或修改节时时通知代理(请参阅NSFetchedResultsControllerDelegate).您通常使用这些方法来更新表视图的显示.

重要的是要确保在设置这样的委托(ARC之前)时忽略任何弱引用,因为它们不会自动归零 - 并且如果留在原位它们可能会中断.

解决方案很简单; 当您的实例被取消分配时,将委托设置为nil.