2011-11-04 139 views
4

我正在使用核心數據在數據庫中輸入歌曲詳細信息。我有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]; 




} 

我堅持這個問題我的代碼保存歌曲..並且不能understan爲什麼會發生這種情況。

早些時候我的申請流程是.. SongsListviewController-> Songs-> SaveSongs

,這是工作的罰款。對於這一點。

請幫

+0

你100%確定錯誤在你打電話保存的那行:?你粘貼的錯誤信息讓我懷疑這一點。 – Steve

+0

YES ..它顯示EXC_BAD_Access上if(![managedObjectContext save:&error]) – iProgrammer

+0

你可以添加完整的堆棧跟蹤?另外,您是否已經通過了所有標準的EXC_BAD_ACCESS故障排除步驟?啓用NSZombies等? – Steve

回答

6

有幾個有趣的方式核心數據得到「鬼祟」你並能保持對周圍事物不存在了引用。

在這種情況下,NSFetchedResultsController是犯罪嫌疑人。

您設置NSFetchedResultsController的委託 - 後來得到更新 - 除了您的委託實例不在處理該更新。

一些背景資料:

如果爲已取得的成果控制器的委託, 寄存器從管理對象 方面收到變更通知控制器。處理影響結果集或 部分信息的上下文中的任何更改都會被處理,並相應地更新結果 。當結果對象 更改位置或修改部分時,控制器通知代理(請參閱 NSFetchedResultsControllerDelegate)。您通常使用這些方法 來更新表格視圖的顯示。

當你設置這樣的代表(ARC前)時,確保你沒有任何弱引用是很重要的,因爲它們不會自動調零 - 而且如果留在原地,它們可能會中斷。

解決方案很簡單;將實例取消分配時,將委託設置爲零。