我有一段让我头疼的代码:
/删除了原始代码,请参阅下面的当前版本/
我收到的消息:
*** -[__NSDate class]: 发送到释放实例 0x69fa350 的消息
编辑 3:
为了测试它,我将所有内容都移到了一个方法中,并验证它仍然会产生相同的错误。
这是一个 splitView iPad 应用程序。 voiceMemo
对象在选择时由左侧的 TableView Controller 传递。右侧 View 有自己的 tableView,这是我加载提醒的地方。
发生了什么,是这样的:
最初,一切都正确加载。在我的数据库中没有任何 reminder
数据的情况下,我可以选择任何条目,它会正确加载。我可以删除它们,修改它们,等等。
我可以选择一个带有 reminder
数据的条目,它会正确加载。详细 View 中的 TableView 已正确填充数据。但是,尝试修改 reminder
时,程序崩溃:消息已发送到已释放的实例。
在不尝试修改任何数据的情况下,如果我尝试使用 reminder
数据加载另一个条目,程序就会崩溃。
我可以从(左侧)主 TableView 中删除没有 reminder
的条目,但是当尝试删除一个 with 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...
关于cocoa-touch - 间接使用 NSManagedObject 时发送到已释放实例的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6020163/