ポップオーバーをトリガーするボタンと、ポップオーバーのチェックボックスがあります。チェックボックスの状態チェックボックスは、NSManagedObjectのフィールド「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
しましたが、エラーはスローされませんでした。プロファイルツールを使用しましたが、アプリが無限ループに陥り、メモリ使用量が急速に増加しているようです。これを引き起こす可能性のある発信者[NSLayoutConstaint _loweredExpressionReportingConstantIsRounded:]
は[NSIsObjectiveLinearExpression replaceVariable:withExpression:processVariableNewToReceiver:processVariableDroppedFromReceiver:]
何か案は?私はこの問題で1日立ち往生しています。本当にこれを解決する必要があります。
編集:問題は25秒で発生します。その後、多くのメモリが割り当てられました。
オブジェクトリストから、次のものが表示され、最後まで繰り返し呼び出されます。