2011-05-16 56 views
1

我有這樣的代碼,是讓我頭疼:消息發送到釋放實例,用NSManagedObject工作時,間接

/原代碼刪除,請參閱下面/

消息當前版本我收到:

*** -[__NSDate class]: message sent to deallocated instance 0x69fa350

EDIT 3:

爲了測試它,我將所有內容都移到了一個方法中,並驗證它仍然會產生相同的錯誤。 這是一個splitView iPad應用程序。選中後,左對齊視圖控制器將傳遞一個對象voiceMemo。右側視圖有自己的tableView,這是我加載提醒的地方。

會發生什麼,是這樣的: 最初,一切正確加載。沒有任何reminder數據在我的數據庫中,我可以選擇任何條目,它正確加載。我可以刪除它們,修改它們等等。 我可以選擇一個包含reminder數據的條目,並且它可以正確加載。詳細視圖中的表格視圖正確填充了數據。但是,試圖修改reminder,程序崩潰:發送到釋放實例的消息。 不嘗試修改任何數據,如果我嘗試加載另一個帶有reminder數據的條目,則程序崩潰。 我可以刪除不具有從(左側)主表視圖reminder條目,但是試圖刪除一個reminder數據時,它崩潰(在save方法)。下次我啓動程序時,該條目將被刪除。

數據庫和自定義類與iPhone版本共享,該版本可以正常工作。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    /* only relevant parts posted */ 

    // Left-side label (title) 

    NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc]  
     initWithKey:@"DBreminderDate" ascending:YES] autorelease]; 
    NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; 
    NSMutableArray *sortedReminders = [NSMutableArray arrayWithArray: 
     [voiceMemo.reminders allObjects]]; 

    [sortedReminders sortUsingDescriptors:sortDescriptors]; 
    self.remindersArray = sortedReminders;  

    AKReminder *reminder = [remindersArray objectAtIndex:indexPath.row]; 

    cell.textLabel.text = reminder.DBreminderTitle; 

    if ([cell.textLabel.text length] == 0) { 
     cell.textLabel.text = @"Reminder"; 
    } 

    // Right-side label (date) 

    NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
    [format setLocale:locale]; 
    [locale release]; 
    NSDate *reminderSetTo = reminder.DBreminderDate; 
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%@", [format  
     stringFromDate:reminderSetTo]]; // breaks here 

    return cell; 
} 

我的數據模型:

Core Data data model

+0

您是否已啓用NSZombies? – 2011-05-16 16:11:41

+1

似乎問題出在NSDate對象上......我無法在您的代碼中看到它。也許它是在別的地方... – Macmade 2011-05-16 16:12:03

+0

@Macmade這就是爲什麼我瘋了..這行代碼調用[NSMutableArray(NSKeyValueSorting)sortUsingDescriptors:]方法,這就是它破壞的地方。 – antalkerekes 2011-05-16 16:16:07

回答

1

本聲明:

NSArray *sortDescriptors = [[NSArray alloc] 
    initWithObjects:&sortDescriptor count:1]; 

看起來很奇怪我。 您的意思是:

NSArray *sortDescriptors = [[NSArray alloc] 
    initWithObjects:sortDescriptor count:1]; 

添加到NSArray的任何對象都應該從NSObject派生; sortDescriptor不(是指向sortDescriptor的指針的內存中的地址)。 這可能會導致不正確的嘗試釋放sortDescriptor而不是sortDescriptor當sortDescriptors被釋放...

+0

這對我來說似乎是個問題。嘗試使用'NSArray * sortDescriptors = [NSArray arrayWithObject:sortDescriptor];'並且進一步刪除釋放語句。 – 2011-05-16 16:25:25

+0

是的,非常好的一點!我編輯了代碼(見上文),但問題仍然存在。 – antalkerekes 2011-05-16 16:36:36

相關問題