我正在使用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
它工作得很好..为此.
请帮忙
Core Data可以通过几种有趣的方式"偷偷摸摸",并可以继续引用不再存在的东西.
在这种情况下,NSFetchedResultsController是嫌疑人.
您设置了NSFetchedResultsController的委托 - 后来得到了更新 - 除了您的委托实例不再处理该更新.
一些背景:
如果为获取的结果控制器设置委托,则控制器将注册以从其受管对象上下文接收更改通知.将处理影响结果集或部分信息的上下文中的任何更改,并相应地更新结果.控制器在结果对象更改位置或修改节时时通知代理(请参阅NSFetchedResultsControllerDelegate).您通常使用这些方法来更新表视图的显示.
重要的是要确保在设置这样的委托(ARC之前)时忽略任何弱引用,因为它们不会自动归零 - 并且如果留在原位它们可能会中断.
解决方案很简单; 当您的实例被取消分配时,将委托设置为nil.
| 归档时间: |
|
| 查看次数: |
538 次 |
| 最近记录: |