gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 19:10:30 25 4
gpt4 key购买 nike

我正在使用核心数据在数据库中输入歌曲详细信息。我有 3 个 View 。第一个是选择歌曲名称及其详细 View ,以将详细信息保存在数据库中。第三个 View 是显示保存的歌曲。我的应用程序正在保存数据,有时会出现异常。

我发现它何时给出异常。如果我选择歌曲并将其保存在数据库中,它就会正确保存。但是当我第一次进入第三 View 时。 Songlistviewcontroller,然后打开歌曲并尝试保存它的详细信息,它在保存行上出现异常..

011-11-04 11:14:10.578 SongsWithLyrics[259:207] * -[SongsListViewController controllerDidChangeContent:]: message sent to deallocated instance 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

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

请帮忙

最佳答案

核心数据有几种有趣的方式来“偷偷地”你,并可以保留对不再存在的事物的引用。

在本例中,NSFetchedResultsController 是嫌疑人。

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

一些背景:

If you set a delegate for a fetched results controller, the controller registers to receive change notifications from its managed object context. Any change in the context that affects the result set or section information is processed and the results are updated accordingly. The controller notifies the delegate when result objects change location or when sections are modified (see NSFetchedResultsControllerDelegate). You typically use these methods to update the display of the table view.

当您像这样设置委托(delegate)时(ARC 之前),请确保清除所有弱引用,这一点很重要,因为它们不会自动归零 - 如果留在原处,它们可能会中断。

解决办法很简单;当您的实例被释放时,将委托(delegate)设置为 nil。

关于iphone - 核心数据应用程序在保存数据时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8005360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com