0

というカスタム テーブル ビュー コントローラーとpfTableViewControllerというカスタム セルがありcustomTableViewCellます。

私の内部から、customTableViewCell次のにアクセスしようとしNSMutableArrayますpfTableViewController

- (IBAction)changeEditing:(UITextField *)sender {
    pfTableViewController *pfWin = (pfTableViewController *) self.superview.superview;
    [pfWin.pfFields replaceObjectAtIndex: myId withObject: @"some text"];
}

UITableView最初のものは を呼び出し、2 番目のものは を呼び出すことになっているため、スーパービューを 2 回使用しましたpfTableViewControllerが、発生しません。このエラーが発生します。

2013-04-17 09:48:38.017 webgopher[21757:907] -[UIViewControllerWrapperView pfFields]: 認識されないセレクターがインスタンス 0x1d590d90 に送信されました

ここで何が起こっているか分かりますか?

もう 1 つスーパービューを使用すると、 にアクセスしUINavigationTransitionViewます。これは遠すぎると思います。

4

2 に答える 2

0

superview.superviewApple で実装されたビューのようなものを使用することUITableViewCellは、非常に悪い考えです。ビュー階層が変わらないことに依存しています。この種のものは、iOS のバージョン間で非常に簡単に壊れる可能性があります。

また、テーブル ビューのスーパー ビューがビュー コントローラーのインスタンスであると想定しています。ただし、View Controller インスタンスはビューではなく、ビュー階層の一部でもありません。代わりに、View Controller のビューをラップするプライベート Apple ビューを取得しています。

ビュー コントローラーによって実装される、ある種のデリゲート メソッドをセルに実装する必要があります。このようにして、プライベート ビュー階層をクロールしなくても、View Controller に「changeEditing」イベントを直接通知できます。

于 2013-04-17T13:20:12.050 に答える