2

ポップオーバーをトリガーするボタンと、ポップオーバーのチェックボックスがあります。チェックボックスの状態チェックボックスは、NSManagedObjectのフィールド「checkboxState」にバインドされています。

シナリオは次のとおりです。

  1. ボタンをクリックすると、ポップオーバーが表示されます。
  2. ポップオーバーのチェックボックスをオンにすると、ポップオーバーが大きくなり、他のいくつかのビューが表示されます(チェックボックスをオフにすると、ビューが非表示になり、ポップオーバーが元のサイズに戻ります)。チェックボックスの状態はここでは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しましたが、エラーはスローされませんでした。プロファイルツールを使用しましたが、アプリが無限ループに陥り、メモリ使用量が急速に増加しているようです。これを引き起こす可能性のある発信者[NSLayoutConstaint _loweredExpressionReportingConstantIsRounded:][NSIsObjectiveLinearExpression replaceVariable:withExpression:processVariableNewToReceiver:processVariableDroppedFromReceiver:]

何か案は?私はこの問題で1日立ち往生しています。本当にこれを解決する必要があります。

編集:問題は25秒で発生します。その後、多くのメモリが割り当てられました。 問題は25秒で発生します。

オブジェクトリストから、次のものが表示され、最後まで繰り返し呼び出されます。 ここに画像の説明を入力してください

4

0 に答える 0