我有一个触发弹出框的按钮,以及弹出框上的一个复选框。复选框的状态复选框绑定到 NSManagedObject 的字段“checkboxState”。
这是场景:
- 我点击按钮,弹出框会出现。
- 我选中弹出框上的复选框,然后弹出框变大并显示其他一些视图(如果我取消选中复选框,视图将被隐藏,并且弹出框恢复到原始大小)。这里的 checkboxState 是 YES
- 我关闭了弹出框,然后做一些其他的事情,将checkboxState 更改为 NO。
- 我再次单击按钮,然后应用程序挂起大约 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 秒。之后分配了很多内存。
从对象列表中,我看到了以下内容,它们被反复调用直到结束。