4

iOS6に更新するまで、私は完全に機能するプロジェクトを持っていました。

バーの項目をタブでタップしてビュー付きのポップオーバーを表示すると、アプリがクラッシュします...

ここに私が得ているエラーがあります

    "reason: 'A view can only be associated with at most one view controller at a time! View <UIView: 0xaa7d730; frame = (20 0; 748 1024); autoresize = RM+BM; layer = <CALayer: 0xaa7d790>> is associated with <TYOFormViewController: 0xaa7d8b0>. Clear this association before associating this view with <TYOFormViewController: 0x14c68a70>.'"

UIViewController と UIPopoverController を宣言するメソッドは次のとおりです。

    - (IBAction)TestDriveTapped:(id)sender{
if (PopoverController != nil) {
    [PopoverController dismissPopoverAnimated:YES];
    self.PopoverController = nil;
}
if (self.PopoverController == nil) {
    UIViewController *bookTestDrive =[[TYOFormViewController alloc] initWithNibName:@"TYOBookTestDriveForm" bundle:nil];

   UIPopoverController *poc  = [[UIPopoverController alloc]
                           initWithContentViewController:bookTestDrive];

   [poc presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
     self.PopoverController = poc;
} else {
    if (PopoverController != nil) {
        [PopoverController dismissPopoverAnimated:YES];
        self.PopoverController = nil;
    }
}

}

エラーは、TYOFormViewController と関連付けるには、TYOFormViewController との関連付けをクリアする必要があることを示しています....どうしてこうなったのですか???

この問題についてあなたの助けをいただければ幸いです...一日中それで立ち往生しています..

ありがとう

4

2 に答える 2

2

一連のxibファイルをロードするときにもこれが発生しました。解決策は、インターフェイス ビルダーに移動し、ファイルの所有者と同じクラス名を持つビュー コントローラー オブジェクトを削除することでした。したがって、私の場合、これらのファイルには、ファイルの所有者に接続されたビューとサブビューのみが含まれ、コントローラーは含まれません。

xib ファイルを解釈するときに、iOS 6 のフードの下で何かが変更されたに違いありません。

于 2012-09-27T14:16:10.440 に答える
-1

iOS 6では、ビュー/コントローラーの処理が少し変更されました。これにより、アプリ内のxibが読み込まれたコンテンツでポップオーバーが壊れ、同じエラーが発生していました。元の(壊れたバージョン)でビューコントローラーコードを手動で割り当てて初期化し、次にビューを手動で割り当てた(実際には、xibのコントローラーを無視している)ことがわかりました。以前のiOSバージョンでは正常に機能しましたが、6.0では機能しませんでした。

私の修正は、コードをクリーンアップし、手動のView Controller作成を取り除き、iOSにxibからロードさせることでした。

  NSArray* nibViews =  [[NSBundle mainBundle] loadNibNamed:@"InfoView" owner:self options:nil];
  InfoView* infoView = [ nibViews objectAtIndex: 0];
  InfoViewController *infoViewController = [ nibViews objectAtIndex: 1];

コントローラからビューへの割り当て(またはその逆)は必要ありません。

ポップオーバーコントローラーとコンテンツコントローラーの両方を調べて、コントローラーとビューの間の直接の割り当てを探すことをお勧めします。

于 2012-09-27T19:46:59.147 に答える