Указание, какой объект получить супер
Как говорится в заголовках, я хочу указать супер NSArrayController
что-то вроде self = [super[NSArrayController] function]
, но не повезло в поисках этого. Есть идеи? Заранее спасибо.
Отредактировано, чтобы удалить абстрактные примеры, поскольку они вводят людей в заблуждение относительно характера моего вопроса.
Цель этого состоит в том, чтобы программно сделать то, что простая привязка 'add' из NSArrayController к NSButton сделала бы в IB. В моем приложении есть несколько arrayControllers, поэтому я хочу указать, какой из них я хочу получить с помощью кода.
Причина, по которой я ищу супер-объект NSArrayController, заключается в том, что у меня сложилось впечатление, что следует обращаться к модели, а не к контроллеру (NSArrayController), а моя модель - это модель базовых данных, к которой, как я полагаю, я могу добраться, используя супер NSArrayController я указываю по имени. Возможно, есть более прямой способ добавления к модели данных.
1 ответ
Вы задаете неправильный вопрос.
Во-первых, давайте различать класс и экземпляр класса. Обратите внимание, что могут быть и действительно часто встречаются несколько экземпляров одного и того же класса.
Класс 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
(МОС).
То, что вы хотите сделать, это не получить super
вашей NSArrayController
, Вместо этого вы хотите связать МО с NSArrayController
, Теперь, как ты это получил? Чтобы узнать это, вы открываете ссылку в XCode или в Интернете на сайте Apple Developer Connection, см. Здесь. Сделай это прямо сейчас. Пройдите через методы. Ты не найдешь того, кто даст тебе Мок.
Затем вы переходите к началу этой страницы и следите за суперклассом NSArrayController
, Смотрите эту ссылкуNSObjectController
, Теперь пройдемся по списку методов. Ты находишь -[NSObjectController managedObjectContext]
, который делает работу!
В заключение: если вы хотите, чтобы moc был связан с NSArrayController
нужно просто сделать
NSManagedObjectContext* moc= [arrayController managedObjectContext];
где arrayController
это пример NSArrayController
Вы хотите иметь дело с Например, если у вас есть несколько экземпляров NSArrayController
s в перо, вы должны иметь несколько IBOutlet
s в приложении делегат, скажем, arrayController1
, arrayController2
и т. д. (которые являются очень плохими именами переменных). Затем вы выбираете тот, с которым хотите иметь дело.