我有这段代码让我头疼:

/原始代码已删除,请参见下面的当前版本/

我收到的消息:

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

编辑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;
}


我的数据模型:

最佳答案

这个说法:

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


我看起来很奇怪
你的意思是:

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




您添加到NSArray的任何对象都应源自NSObject。 &sortDescriptor不会(是指向sortDescriptor的指针的内存中的地址)。
当sortDescriptors被解除分配时,这可能会导致不正确的尝试取消分配&sortDescriptor而不是sortDescriptor ...

09-11 00:04