Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Macos 更改popover的contentSize时exc访问错误_Macos_Cocoa_Exc Bad Access_Nspopover_Contentsize - Fatal编程技术网

Macos 更改popover的contentSize时exc访问错误

Macos 更改popover的contentSize时exc访问错误,macos,cocoa,exc-bad-access,nspopover,contentsize,Macos,Cocoa,Exc Bad Access,Nspopover,Contentsize,我有一个按钮来触发弹出框,弹出框上有一个复选框。复选框的状态复选框绑定到NSManagedObject的字段“checkboxState” 以下是场景: 我点击按钮,弹出框就会出现 我选中弹出框上的复选框,弹出框会变大,并显示一些其他视图(如果我取消选中复选框,视图将被隐藏,弹出框会恢复到原始大小)复选框状态在此处为“是” 我关闭popover,并执行一些其他操作,将checkboxState更改为NO 我再次单击按钮,然后应用程序挂起大约10秒钟,xcode抛出EXC_BAD_访问(代码=2,

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

以下是场景:

  • 我点击按钮,弹出框就会出现
  • 我选中弹出框上的复选框,弹出框会变大,并显示一些其他视图(如果我取消选中复选框,视图将被隐藏,弹出框会恢复到原始大小)复选框状态在此处为“是”
  • 我关闭popover,并执行一些其他操作,将checkboxState更改为NO
  • 我再次单击按钮,然后应用程序挂起大约10秒钟,xcode抛出EXC_BAD_访问(代码=2,地址=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设置值:@NO-forKey:@checkboxState]

    如果我在showPopover中对
    \u myPopover.contentSize=NSMakeSize(360270)
    进行注释;它会起作用的

    如果我对
    [anManagedObject setValue:@NO-forKey:@“checkboxState”]
    进行注释,它将起作用

    我使用了
    @try@catch
    ,没有抛出错误。我使用了配置文件工具,看起来应用程序进入了一个无限循环,并且内存使用量增长非常快。导致此问题的可能调用者是
    [nsLayoutConstant\u loweredExpressionReportingConstantIsRounded:
    [NSIsObjectiveLinearExpression replaceVariable:withExpression:processVariableNewToReceiver:processVariableDroppedFromReceiver:

    有什么想法吗?这个问题我已经解决了一天了。真的需要解决这个问题

    编辑: 问题发生在25秒。在那之后,大量的内存被分配了。

    从对象列表中,我看到了以下内容,它们被反复调用,直到最后。

    当你在带有僵尸模板的Instruments下运行此操作时,你发现了什么?@PeterHosey我没有找到任何具体的内容。也许是因为我不知道如何使用它。通过查看调用方列表,我怀疑它进入了无限循环。我在必要时通过重新创建popover视图解决了这个问题,但我很高兴知道是什么导致了这个问题。如果问题是由发送一个死对象的消息引起的,那么在Zombies下运行它将导致在仪器的时间线中出现一个标志。什么是堆栈跟踪导致您怀疑存在“无限循环”?顺便问一下:
    EXC\u BAD\u ACCESS
    表示您的进程已死亡。没有任何标志,即使应用程序没有响应,时间线也会继续。我将发布仪器时间线的屏幕截图。