2

我有一个触发弹出框的按钮,以及弹出框上的一个复选框。复选框的状态复选框绑定到 NSManagedObject 的字段“checkboxState”。

这是场景:

  1. 我点击按钮,弹出框会出现。
  2. 我选中弹出框上的复选框,然后弹出框变大并显示其他一些视图(如果我取消选中复选框,视图将被隐藏,并且弹出框恢复到原始大小)。这里的 checkboxState 是 YES
  3. 我关闭了弹出框,然后做一些其他的事情,将checkboxState 更改为 NO
  4. 我再次单击按钮,然后应用程序挂起大约 10 秒,xcode 抛出 EXC_BAD_ACCESS(code=2, address=0x7fff5f3ffff8),调用者是 0_CFArrayReplaceValues

该应用程序不会死,它只是没有响应。

按钮的动作如下:

- (IBAction)showPopover:(id)sender {
    if (!_myPopover) {
        _myPopover = [[NSPopover alloc] init];
        _myPopover.delegate = self;
        _myPopover.contentViewController = self;
        _myPopover.animates = YES;
        _myPopover.behavior = NSPopoverBehaviorSemitransient;
        _myPopover.appearance = NSPopoverAppearanceMinimal;
    }

    id theManagedObject = self.myArrayController.selection;
    BOOL state = [[theManagedObject valueForKey:@"checkboxState"] boolValue];   

    if (state) {        
        _myPopover.contentSize = NSMakeSize(360, 340);
        [self.view1 setHidden:NO];
        [self.view2 setHidden:NO];
    }
    else {
        [self.view1 setHidden:YES];
        [self.view2 setHidden:YES];
        _myPopover.contentSize = NSMakeSize(360, 270);
    }

    [_myPopover showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMaxYEdge];
}  

更改对象的 checkboxState 的代码是: [anManagedObject setValue:@NO forKey:@"checkboxState"]

如果我_myPopover.contentSize = NSMakeSize(360, 270)在 showPopover 中评论;它会起作用的。

如果我评论[anManagedObject setValue:@NO forKey:@"checkboxState"],它将起作用

我用过@try @catch,没有报错。我使用了 Profile 工具,似乎应用程序进入了无限循环,并且内存使用量上升非常快。导致这种情况的可能来电者是[NSLayoutConstaint _loweredExpressionReportingConstantIsRounded:][NSIsObjectiveLinearExpression replaceVariable:withExpression:processVariableNewToReceiver:processVariableDroppedFromReceiver:]

有任何想法吗?我被这个问题困扰了一天。真的需要解决这个问题。

编辑:问题发生在第 25 秒。之后分配了很多内存。 问题发生在第 25 秒。

从对象列表中,我看到了以下内容,它们被反复调用直到结束。 在此处输入图像描述

4

0 回答 0