5

何が起こっているのか理解できません。

ページング付きのスクロール ビューを使用する iPhone アプリを構築しています。スクロール ビューにはいくつかのビューが含まれており、それらのビュー コントローラーは次の呼び出しによってストーリーボードから読み込まれます。

[self.storyboard instantiateViewControllerWithIdentifier:@"identifier"];

ビュー コントローラーを可変配列に追加し、それらのビューをスクロール ビューにサブビューとして追加します。画面に表示された後、View Controller の割り当てが解除されるため、ターゲット アクションは機能しなくなります。

Zombie Objects を有効にすると、デバッガーはアクションをコントローラーに送信する際に次のように記述します。

*** -[StreamingViewController performSelector:withObject:withObject:]: 割り当て解除されたインスタンス 0x914f0e0 に送信されたメッセージ

私は本当にこれを修正しようとしましたが、成功しなかったので、すべての助けに感謝します.

いくつかのコード:

StreamingViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"Streaming View Controller"];

[self.pageControllers addObject:controller]; // adding view controller to mutable array

controller.view.frame = self.scrollView.frame;
[self.scrollView addSubview:controller.view];
4

1 に答える 1

2

ARC を使用している場合、何かへの有効なポインターがなくなると、一般的にドロップアウトします。したがって、あなたの場合、View Controller は範囲外になり、解放されます。ビューは によって保持されているため、引き続き保持されself.scrollViewます。ビューコントローラーを配列に追加すると、それが修正されますが、配列が正しくインスタンス化されている場合のみです。プロパティは自動的にインスタンス化されません。プロパティを使用しても、アクセサーをオーバーライドしない限りインスタンス化されません。Cocoa の性質上、オブジェクトを nil プロパティに追加しようとしても、それは完全に有効なコードであるため、エラーやメッセージが表示されることはありません。

pageController の作成方法を確認し、 使用するに正しくインスタンス化されていることを確認してください。

例えば。self.pageControllers = [[NSMutableArray alloc] init];

于 2012-09-24T21:57:04.890 に答える