更改popover的contentSize时的错误访问

时间:2013-03-21 14:28:49

标签: macos cocoa exc-bad-access nspopover contentsize

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

以下是该方案:

  1. 我点击按钮,弹出窗口会显示出来。
  2. 我选中弹出窗口上的复选框,然后弹出窗口变大并显示其他一些视图(如果我取消选中该复选框,视图将被隐藏,弹出窗口将恢复原始大小)。 此处为checkboxState为YES
  3. 我关闭了popover,然后执行其他一些将checkboxState更改为NO 的内容。
  4. 我再次单击该按钮,然后应用程序挂起约10秒,xcode抛出EXC_BAD_ACCESS(代码= 2,地址= 0x7fff5f3ffff8),调用方为0_CFArrayReplaceValues
  5. 应用程序不会死,它只是没有响应。

    按钮的操作如下:

    - (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"]

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

    如果我对[anManagedObject setValue:@NO forKey:@"checkboxState"]发表评论,它将会有效

    我使用了@try @catch,没有抛出任何错误。我使用了Profile工具,似乎应用程序进入无限循环,内存使用率很快上升。导致此问题的可能是[NSLayoutConstaint _loweredExpressionReportingConstantIsRounded:][NSIsObjectiveLinearExpression replaceVariable:withExpression:processVariableNewToReceiver:processVariableDroppedFromReceiver:]

    有什么想法吗?我一直坚持这个问题一天。真的需要解决这个问题。

    编辑: 问题发生在第25秒。之后分配了大量内存。 The issues occurs at 25th second.

    从对象列表中,我看到以下内容,并且反复调用它们直到结束。 enter image description here

0 个答案:

没有答案