0

これはおそらく非常に単純ですが、頭がわかりません。(ストーリーボードを使用して) 2 つの UITableView サブビューが配置された UIViewController があります。

ここに画像の説明を入力

これらは両方ともカスタム クラスを持ち、アイテムの 2 つの個別のリストに使用されます。カスタム クラスが使用されるのは、各 UITableView のセルをテーブル間でドラッグ アンド ドロップできるためです。ビュー コントローラはセグエされており、セグエでプッシュされた管理対象オブジェクト コンテキストがあります。

私が理解できないのは、管理対象オブジェクト コンテキスト (およびその他のオブジェクト) を UITableView サブビューに渡す方法です。オブジェクトは、テーブル ビュー クラスで定義されます。

各テーブル ビューに IBOutlets を設定したので、UITableViews 自体を参照できますが、カスタム オブジェクトは表示されません。

オブジェクトをカスタム クラス サブビューに渡すにはどうすればよいですか?

4

2 に答える 2

0

私が理解できないのは、管理対象オブジェクト コンテキスト (およびその他のオブジェクト) を UITableView サブビューに渡す方法です。

まず、管理オブジェクト コンテキストをテーブルのサブビューに渡す必要はありません。UITableView は、そのデータ ソースと対話することによって、セルにデータを取り込みます。テーブルは、表示されるデータについて何も知りません。テーブルのサブビューはそのセルであり、それらはデータ ソースから取得されます。ほとんどの場合、View Controller はテーブルのデータ ソースおよびデリゲートとして機能します。管理対象オブジェクトのコンテキストについて知る必要がある場合、それはデータ ソースであり、通常は View Controller です。

MOC をテーブル セルまたは他のサブビューに渡す必要があるかどうかの問題はさておき、その方法について説明しましょう。あるオブジェクトが別のオブジェクトと直接通信するには、最初のオブジェクトが 2 番目のオブジェクトへのポインターを必要とします。オブジェクトへのポインタがあれば、そのオブジェクトに好きなメッセージを送ることができます (ただし、オブジェクトがそのメソッドを実装している場合は大いに役立ちます!)。ですから、最初の仕事は、話したいビューを見つけることです。

テーブル間のドラッグ アンド ドロップの実装について話しているので、問題のサブビューはテーブル セルであり、ドロップ操作にはタッチが終了するセルの変更が含まれると推測します。最初に終点をテーブルのローカル座標に変換し、次にテーブルの-indexPathForRowAtPoint:メソッドを使用することで、タッチが終了するテーブル セルを取得できます。行のインデックス パスを取得したら、 を介して対応するセルを取得できます-cellForRowAtIndexPath:。セルへのポインターを使用して、任意のパラメーターを渡すメッセージをセルに送信できます。

最後に、このアプローチを採用する場合、おそらく管理オブジェクト コンテキスト自体を渡す必要はありません。ドラッグによって表されるデータは、管理オブジェクトcontextではなく管理オブジェクトになる可能性が高いため、おそらく渡したいのは管理オブジェクトです。コンテキストは、多数の管理対象オブジェクトのコンテナーであり、すべての管理対象オブジェクトには、それが存在するコンテキストへの参照があるため、コンテキストを個別に渡す必要はありません。

于 2013-07-10T14:35:10.830 に答える