Указание, какой объект получить супер - PullRequest
1 голос
/ 19 февраля 2011

Как видно из заголовков, я хочу указать супер-символ NSArrayController, что-то вроде self = [super[NSArrayController] function], но не смог найти его.Есть идеи?Заранее спасибо.

Отредактировано для удаления абстрактных примеров, поскольку они вводят людей в заблуждение относительно характера моего вопроса.

Цель этого состоит в том, чтобы программно сделать то, чтопростая привязка 'add' из NSArrayController к NSButton будет делать в IB.В моем приложении есть несколько arrayController, поэтому я хочу иметь возможность указать, какой из них я хочу получить в качестве суперобъекта с помощью кода.

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

1 Ответ

5 голосов
/ 19 февраля 2011

Вы задаете неправильный вопрос.

Сначала давайте выделим класс и экземпляр класса.Обратите внимание, что может быть и действительно часто встречается несколько экземпляров одного и того же класса.

Класс C может быть подклассом другого класса A.Тогда A является суперклассом из C.Предположим, у вас есть экземпляр c класса C.Затем в реализации методов класса C, self обозначает экземпляр самого c, а super обозначает экземпляр c как экземпляр его суперкласс A.В некотором смысле экземпляр класса C также является экземпляром класса A.

. Объекты могут иметь другие отношения, отличные от супер- или подклассов.Например, класс C может иметь в своем интерфейсе переменную экземпляра B* b;. В этом случае экземпляр c класса C имеет указатель на экземпляр b изкласс B.В этом случае c является , а не экземпляром класса B.

Отношение между NSArrayController и контекстом управляемого объекта является одним из последних.Экземпляр NSArrayController содержит указатель на экземпляр NSManagedObjectContext (moc).

То, что вы хотите сделать, это не получить super вашего NSArrayController.Вместо этого вы хотите связать moc с NSArrayController.Теперь, как ты это получил?Чтобы выяснить это, вы открываете ссылку в XCode или в Интернете по адресу Apple Developer Connection, см. Здесь .Сделай это прямо сейчас.Пройдите через методы.Ты не найдешь того, кто даст тебе Мок.

Затем перейдите в начало этой страницы и следуйте суперклассу NSArrayController.См. эту ссылку NSObjectController.Теперь пройдемся по списку методов.Вы найдете -[NSObjectController managedObjectContext], который выполняет эту работу!

В заключение: если вы хотите, чтобы moc ассоциировался с NSArrayController, вам просто нужно сделать

NSManagedObjectContext* moc= [arrayController managedObjectContext];

где arrayControllerэто экземпляр NSArrayController, с которым вы хотите иметь дело.Например, если у вас есть несколько экземпляров NSArrayController s в перо, у вас должно быть несколько IBOutlet s в делегате приложения, скажем, arrayController1, arrayController2 и т. д. (которые являются очень плохими именами переменных).Затем вы выбираете тот, с которым хотите иметь дело.

...