2014-11-23 3 views
1

Я недавно начал экспериментировать с Xcode после введения Swift. У меня нет фона в Objective C, но я добиваюсь прогресса, особенно с привязками Cocoa и основными данными. Я играю с OSX-приложением, которое имеет одно xib и одно окно и привязано к модели Core Data. Пока все работает отлично, и я могу заполнить таблицу без проблем.Необходимо использовать второе окно с использованием привязок и данных ядра Cocoa в Swift

Следующим шагом будет включение второго окна с другим табличным представлением, связанным с моей базой данных. Я нашел это невозможным, потому что я не мог получить доступ к AppDelegate, когда пытался связать второй вид таблицы с базой данных.

Итак, я попытался создать второе окно в MainMenu xib; теперь привязка возможна, но она кажется очень неуклюжей. Конечно, второе окно требует своего собственного xib, и если да, то как я привязываюсь к AppDelegate?

Моя цель - использовать связки Coocoa, насколько это возможно, для устранения «кода клея», но все мои исследования показывают только примеры Objective C, некоторые из которых очень старые, содержат огромное количество программного кода и не имеют все это относится к Xcode v6.1.

Я новичок в Xcode, но до сих пор я люблю его и буду благодарен за любые советы или помощь.

ответ

0

Шаблон приложения с одним координатором добавляет объект «делегировать приложение» к MainMenu.Xib, и он несколько магически связан с делегатом объекта NSApplication, поскольку объект делегирования приложения создается процессом загрузки Nib и привязан к экземпляр NSApplication. Довольно трудно дублировать этот объект в другом Nib. You can really create havoc trying to do so.

Самый простой способ сделать то, что вы хотите в любом другом Nib, - это привязка к приложению с ключом, начинающимся с «делегата». Вуала, у тебя есть то, что ты хочешь.

Другие будут настаивать на том, что объект делегата не должен владеть базовым стеком данных, и вы должны переместить весь этот шаблонный код в другое место. Или, что каждый контроллер представления должен быть передан указателем MOC как свойство (см. Комментарии ниже) ... но это не имеет отношения к этому вопросу.

YMMV, этот ответ дается из Вселенной Objective-C, но язык не должен иметь значения.

+0

Спасибо @stevesliva. Ваше решение идеально подходит и без проблем. Однако после публикации моего вопроса я сделал еще несколько исследований и обнаружил, что вставка «let managedObjectContext = (NSApplication.sharedApplication(). Делегировать как AppDelegate) .managedObjectContext' во втором оконном контроллере позволил мне связать вторичный контроллер массива с владельцем файла и сохраните путь ключа 'self.managedObjectContext'. Но это лучшее решение; использовать ваш подход или другой? –

+0

Ваш комментарий считается лучшим подходом. (Передача указателя moc между контроллерами). А побочным преимуществом является то, что во втором окне вы можете использовать контекстные дочерние контексты, которые позволяют легко отменить/сохранить. Таким образом, self.moc будет дочерним элементом делегата moc, и вы сохраните его родителям, только если пользователь захочет сохранить все свои изменения в gui. Я ответил так же, как и потому, что привязка через приложение на самом деле не упоминается как решение этой проблемы, но это самый простой. – stevesliva