我有这段代码让我头疼:
/原始代码已删除,请参见下面的当前版本/
我收到的消息:*** -[__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 ...