Как программно получить выбор таблицы и строку таблицы для приложения Core Data? - PullRequest
1 голос
/ 14 февраля 2010

Я пытаюсь создать приложение Core Data, в котором, когда вы выбираете одного «Игрока» в TableView, и список всех товарищей по команде появляется во втором TableView, со столбцом, сколько раз эти два игрока играли в той же «Команде» (другой организации).

Это полностью застряло, потому что, хотя я знаю, как заполнять таблицу из обычного массива, использование ArrayControllers и Core Data действительно загромождает мой взгляд на ситуацию.

Как бы вы подошли к этому?

1 Ответ

2 голосов
/ 14 февраля 2010

У вас проблема с привязками, а не проблема с базовыми данными.: -)

Вы обязательно должны получить хэндл Привязки какао , прежде чем иметь дело с Базовыми данными.Это указано в документации и очень верно.

Тема вашего вопроса отличается от основной, поэтому я отвечу на оба вопроса.

Показ товарищей по команде

Основные данные в стороне, предположим, что у вас есть таблица, представляющая экземпляры Player.У игрока есть одна команда.В команде много игроков.Следовательно, предполагается, что экземпляр Player имеет в качестве товарищей по команде «team.players» (за исключением самого себя).Независимо от того, используете ли вы Core Data для управления моделью или нет, это относится ко всем отношениям.

Если вы прочитаете и освоите привязки Cocoa, вы обнаружите, что это совсем не сложно установитьиспользование базовой настройки Master / Detail (с дополнительным контроллером массива для детализации, для простоты).Ваш контроллер основного массива представляет все экземпляры Player, в то время как контроллер массива подробных данных представляет товарищей по команде - или «team.players» выбора Мастера (за вычетом самого себя).

Контроллер массива Teammates будет иметь свой объект и контекст управляемого объектанастроить как обычно (см. документы).«ContentSet» будет привязан к «выделенному» ключу контроллера главного массива, с «team.players» в качестве пути ключа модели.

Хитрость заключается в том, чтобы отфильтровать выбранного игрока на главном контроллере, используя предикаты .Это можно сделать с помощью Filter Predicate контроллера массива .Может быть, с форматом «self! =% @», Где «% @» представляет выбор контроллера основного массива.Я оставлю Предикаты (сложная тема для себя) для вас.Помните, что вы можете установить их в коде ([myController setFilterPredicate: myPredicate]) или с помощью привязок.Предикаты также независимы от базовых данных.

Получение выбора

Поскольку контроллер массива отвечает за массив, который представляет таблица, онлучше всего спросить контроллер массива, каков его выбор.Один из способов - запросить его -arrangedObjets для объектов в его -selectedIndexes.

NSArray * selectedObjects = [[myArrayController arrangedObjects] objectsAtIndexes:[myArrayController selectedIndexes]];

Вы также можете запросить его для -selectedObjects.Существуют различия между этими двумя подходами, которые описаны в документации (справка по API и концептуальные документы), которую вы должны обязательно понять, но вопрос о контроллере является наиболее важной концепцией , независимо от того, используете ли вы NSArrayController илинекоторый пользовательский контроллер, соответствующий протоколам и.

Отказ от ответственности: Напечатано на скорую руку после вечернего сакэ.Не проверено на ошибки.: -)

...