Cocoa touch 间接使用NSManagedObject时发送到解除分配实例的消息
我有一个让我头疼的代码: /原始代码已删除,请参阅下面的当前版本/ 我收到的信息是:Cocoa touch 间接使用NSManagedObject时发送到解除分配实例的消息,cocoa-touch,ios,memory,nsmanagedobject,Cocoa Touch,Ios,Memory,Nsmanagedobject,我有一个让我头疼的代码: /原始代码已删除,请参阅下面的当前版本/ 我收到的信息是: ***-[\uu NSDate class]:消息发送到解除分配的实例0x69fa350 编辑3: 为了测试它,我将所有内容都移动到一个方法中,并验证它仍然会产生相同的错误。 这是一款splitView iPad应用程序。选择后,voiceMemo对象将由左侧表视图控制器传递。右侧视图本身有一个tableView,这是我加载提醒的地方 发生了什么,是这样的: 最初,所有内容都正确加载。在我的数据库中没有任何提醒
***-[\uu NSDate class]:消息发送到解除分配的实例0x69fa350
编辑3:
为了测试它,我将所有内容都移动到一个方法中,并验证它仍然会产生相同的错误。
这是一款splitView iPad应用程序。选择后,voiceMemo
对象将由左侧表视图控制器传递。右侧视图本身有一个tableView,这是我加载提醒的地方
发生了什么,是这样的:
最初,所有内容都正确加载。在我的数据库中没有任何提醒
数据,我可以选择任何条目,它将正确加载。我可以删除它们,修改它们,等等。
我可以选择一个带有提醒
数据的条目,并且它可以正确加载。详图视图中的表视图正确填充了数据。但是,尝试修改提醒时,程序崩溃:消息发送到解除分配的实例。
在不尝试修改任何数据的情况下,如果我尝试加载另一个带有提醒的条目
数据,程序将崩溃。
我可以从(左侧)主表视图中删除没有提醒
的条目,但是当尝试删除带有提醒
数据的条目时,它会崩溃(在保存
方法中)。不过,下一次启动程序时,条目将被删除
数据库和自定义类与正常工作的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的指针在内存中的地址)。
这可能会导致在解除分配sortDescriptor时不正确地尝试解除分配&sortDescriptor而不是sortDescriptor…此语句:
NSArray *sortDescriptors = [[NSArray alloc]
initWithObjects:&sortDescriptor count:1];
我觉得很奇怪。
你是说:
NSArray *sortDescriptors = [[NSArray alloc]
initWithObjects:sortDescriptor count:1];
?
添加到NSArray的任何对象都应派生自NSObject&sortDescriptor没有(是指向sortDescriptor的指针在内存中的地址)。
这可能会导致在解除分配sortDescriptor时不正确地尝试解除分配&sortDescriptor而不是sortDescriptor…问题似乎出在NSDate对象上。。。我在你的密码上看不到。也许在别的地方…@Macmake这就是为什么我很困惑。。这行代码调用了[NSMutableArray(NSKeyValueSorting)sortUsingDescriptors:]方法,这就是它的错误所在。由于您指出问题出在deallocatedNSDate
实例上,我怀疑这与您的核心数据模型有关。-sortusingsdescriptors
方法试图基于描述符访问keypathdbrementerDate
上的对象,该描述符似乎已被解除分配。@Deepak您似乎是对的,当尝试处理对象时,问题也会发生在其他地方。我已经相应地编辑了我的帖子。我不能告诉你为什么,但我想如果你做了rementersetto=[[rementer.dbrementersdate copy]autorelease]代码>在最后一段代码中,它可能在那里工作。似乎问题出在NSDate对象上。。。我在你的密码上看不到。也许在别的地方…@Macmake这就是为什么我很困惑。。这行代码调用了[NSMutableArray(NSKeyValueSorting)sortUsingDescriptors:]方法,这就是它的错误所在。由于您指出问题出在deallocatedNSDate
实例上,我怀疑这与您的核心数据模型有关。-sortusingsdescriptors
方法试图基于描述符访问keypathdbrementerDate
上的对象,该描述符似乎已被解除分配。@Deepak您似乎是对的,当尝试处理对象时,问题也会发生在其他地方。我已经相应地编辑了我的帖子。我不能告诉你为什么,但我想如果你做了rementersetto=[[rementer.dbrementersdate copy]autorelease]代码>在最后一段代码中,它可能在那里工作。这对我来说似乎是个问题。尝试使用NSArray*sortDescriptors=[NSArray arrayWithObject:sortDescriptor]代码>并将发布声明进一步删除。是的,非常好!我已经编辑了代码(见上文),但问题仍然存在。这对我来说似乎是个问题。尝试使用NSArray*sortDescriptors=[NSArray arrayWithObject:sortDescriptor]代码>并将发布声明进一步删除。是的,非常好!我已经编辑了代码(见上文),但问题仍然存在。