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

时间:2011-11-04 05:47:57

标签: 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];




}

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

之前我的申请流程是.. SongsListviewController-> Songs-> SaveSongs

并且它工作得很好..为此。

请帮忙

1 个答案:

答案 0 :(得分:6)

Core Data可以通过几种有趣的方式对您进行“偷偷摸摸”,并且可以继续引用不再存在的内容。

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

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

一些背景知识:

  

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

当你设置这样的代表(pre-ARC)时,确保你没有任何弱引用是很重要的,因为它们不会自动归零 - 如果它们保持原位它们就会中断。

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