Я использую Core Data в моем приложении OS X, где у меня есть некоторые TableViews, привязанные к NSArrayControllers. Проблема, с которой я сталкиваюсь, - это когда я пытаюсь заполнить табличное представление на листе, используя контроллер массива, где я не хочу, чтобы содержимое сохранялось.Использование NSArrayController без базовых данных
Вот как приложение висит вместе;
Окно 1 - отображает список пользователей в виде таблицы и позволяет добавлять и удалять пользователей. Содержание сохраняется через привязки данных ядра.
Окно 2 - отображает список групп в виде таблицы. Во втором представлении таблицы отображается список пользователей, принадлежащих выбранной группе. Содержание сохраняется через привязки данных ядра. Кнопка «добавить пользователей» вызывает лист для добавления пользователей в группу.
Добавить лист пользователя - на этом листе показан вид таблицы пользователей, которые еще не являются членами выбранной группы. Нажатие кнопки закрытия на листе добавляет выбранных пользователей в выбранную группу.
Хорошо, проблема у меня с контроллером массива для добавления страницы «Добавить пользователей». Когда я вызываю лист, я перебираю всех пользователей и добавляю их в контроллер массива, если они еще не существуют в группе. Когда я закрываю лист, я пытаюсь очистить контроллер массива с помощью removeObject: но это приводит к тому, что «этот метод нельзя использовать с ModelObjectContect».
Зачем нужен MOC для удаления элементов из контроллера массива? Это только для показа, поэтому я не нуждаюсь в этом, чтобы упорствовать. Если я установил контроллеры массива MOC в список делегатов моего приложения, он физически удалит пользователей, которых я, очевидно, не хочу. Я просто хочу удалить их из табличного представления листа.
Я думал, что ответ может состоять в том, чтобы создать еще один MOC для использования в качестве царапины и не привязывать его к постоянному хранилищу, однако это просто дало мне другую ошибку при использовании removeObject :, что-то вроде строк can 't удалять объекты, которые существуют в другом MOC. "
Почему я могу добавить объект в контроллер массива, но не удалить его? В тех случаях, когда вы фактически не хотите, чтобы объекты, физически удаленные, вы должны были получить доступ к базовому «содержимому», например. [содержимое массива]? Я играл с этим, но получаю странные результаты отображения, поскольку он, кажется, играет с содержимым контроллера массива за его спиной. Если я это сделаю, есть ли способ сказать контроллеру массива «кстати, я возился с тобой, и тебе, возможно, нужно собраться вместе»?
Похоже, вы не должны использовать контроллеры массивов без Core Data, но в документации есть много комментариев, которые предполагают, что он работает с и без данных ядра.
Я думаю, что это является ответом для меня, однако я не могу получить предикат права. Вы использовали CONTAINS, но это для строк, не так ли? Я пытался использовать IN, но не могу получить радость, потому что я предикат noob. Я думаю, мне нужно что-то вроде [sheetUsersAC setFetchPredicate: [NSPredicate predicateWithFormat: @ "NOT% @ IN groups", [groupsAC selection]]], но это не работает. Так близко ... – swampf0etus
Да, вы правы: 'CONTAINS' только для строк. Виноват. Я думаю, что '' NONE groups ==% @ "' должны работать. –
Наконец-то взломал! Я не понял, что выбор возвращает прокси-объект, а не исходный объект. Чтобы получить исходный объект из выделения, мне пришлось использовать valueForKey: @ "self". Как только я понял это, я обнаружил, что могу использовать «NONE groups ==% @» или «NOT% @ IN groups»: '[sheetUsersAC setFetchPredicate: [NSPredicate predicateWithFormat: @" NOT% @ IN groups ", [[groupsAC selection] valueForKey: @ "я"]]] ' – swampf0etus