0

さて、UITableViewデリゲートのコードを別のクラスに移動することにしました。必要に応じてサブクラス、サブクラス。これにより、 Cellforrowwithindexpath関数がサブクラス内で実行するすべての要素に簡単にアクセスできるようになります。

しかし今、わずかな問題があります...

UItableViewに関する限り、正常に機能しますが、ナビゲーションコントローラーを使用してビューを上にプッシュしようとすると、機能しませんでした。その後、自分自身を発見しました...メインクラス内は実際にはインスタンスでした私のサブクラスの...何?ですから、自己は実際には自己と同じではありません...

誰かが私がここで非常に間違っていることについて何か洞察を私に与えることができますか?

編集:それで、代わりにデリゲートのサブクラスに変更しました。他の誰かがこの問題に遭遇した場合に備えて、正常に動作しますが、そもそもなぜそれが起こったのかについてはまだ混乱しています...

コード:

@interface OpenGameList : MainMenuViewContoller <UITableViewDelegate,UITableViewDataSource>
{

}

@end

MainMenuViewControllerのviewDidLoad関数で

_openGameList = [[OpenGameList alloc] init];
_openGameList.delegate = self;

friendsTable.delegate = _openGameList;
friendsTable.dataSource = _openGameList;

そしてその後よりも、MainMenuViewControllerでのselfの使用はOpenGameListと等しいように思われるため、使用[[fromView navigationController] pushViewController:toView animated:NO];が機能しないのはなぜですか

4

1 に答える 1

1

self常に実際にインスタンス化されたオブジェクト(最も派生したクラス)を指します。

サブクラスのインスタンスがあり、にメッセージを送信するselfと、サブクラスの実装が存在する場合は常に呼び出されます。スーパークラスの実装ファイルにいるのか、サブクラスの実装ファイルにいるのかは関係ありません。

これはポリモーフィズムに不可欠です。これにより、サブクラスが親クラスの動作をオーバーライドできるようになります。例にとってみましょう-[UIView drawRect:]。サブクラスの描画コードを呼び出すには、コードinをUIView呼び出すときに、呼び出す[self drawRect:]必要があるのはサブクラスの描画実装です。

スーパークラスとサブクラスは親オブジェクトと子オブジェクトではなく、同じオブジェクトに適用されるより具体的なタイプであることを覚えておくと役立つ場合があります。AUITableViewUIScrollView、、、、ですが、1つ作成するUIView、それらすべてである1つのオブジェクトがあり、常にそのオブジェクトを参照します。NSObjectself

于 2013-01-07T06:40:07.093 に答える