Как программно получить выбор таблицы и строку таблицы для приложения Core Data?

StackOverflow https://stackoverflow.com/questions/2259408

Вопрос

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

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

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

Это было полезно?

Решение

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

Вам определенно следует разобраться с Связующие вещества из какао прежде чем приступить к работе с Основными данными.Это указано в документах и очень верно.

Предмет вашего вопроса, похоже, отличается от основного текста, поэтому я отвечу на оба вопроса.

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top