Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa touch 间接使用NSManagedObject时发送到解除分配实例的消息_Cocoa Touch_Ios_Memory_Nsmanagedobject - Fatal编程技术网

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:]方法,这就是它的错误所在。由于您指出问题出在deallocated
NSDate
实例上,我怀疑这与您的核心数据模型有关。
-sortusingsdescriptors
方法试图基于描述符访问keypath
dbrementerDate
上的对象,该描述符似乎已被解除分配。@Deepak您似乎是对的,当尝试处理对象时,问题也会发生在其他地方。我已经相应地编辑了我的帖子。我不能告诉你为什么,但我想如果你做了
rementersetto=[[rementer.dbrementersdate copy]autorelease]在最后一段代码中,它可能在那里工作。似乎问题出在NSDate对象上。。。我在你的密码上看不到。也许在别的地方…@Macmake这就是为什么我很困惑。。这行代码调用了[NSMutableArray(NSKeyValueSorting)sortUsingDescriptors:]方法,这就是它的错误所在。由于您指出问题出在deallocated
NSDate
实例上,我怀疑这与您的核心数据模型有关。
-sortusingsdescriptors
方法试图基于描述符访问keypath
dbrementerDate
上的对象,该描述符似乎已被解除分配。@Deepak您似乎是对的,当尝试处理对象时,问题也会发生在其他地方。我已经相应地编辑了我的帖子。我不能告诉你为什么,但我想如果你做了
rementersetto=[[rementer.dbrementersdate copy]autorelease]在最后一段代码中,它可能在那里工作。这对我来说似乎是个问题。尝试使用
NSArray*sortDescriptors=[NSArray arrayWithObject:sortDescriptor]并将发布声明进一步删除。是的,非常好!我已经编辑了代码(见上文),但问题仍然存在。这对我来说似乎是个问题。尝试使用
NSArray*sortDescriptors=[NSArray arrayWithObject:sortDescriptor]并将发布声明进一步删除。是的,非常好!我已经编辑了代码(见上文),但问题仍然存在。