Правильное использование NSViewController providedObject

У меня есть NSViewController, управляющий NSTableView, и я заметил, что NSViewController имеет свойство representedObject, однако это не IBOutlet, и я не могу привязать dataSource из NSTableView к свойству representedObject NSViewController в построителе интерфейса. Как предполагается использовать свойство createdObject? Есть ли примеры правильного использования?


person Tony    schedule 26.12.2011    source источник


Ответы (2)


Свойство representedObject должно быть установлено для объекта, который находится за пределами пера, такого как документ, другой контроллер модели или объект модели. Вещи в пере должны получать данные от ВК или representedObject ВК.

person Peter Hosey    schedule 27.12.2011
comment
Хм, как лучше всего получить ссылку на ViewController из объектов, инициализированных пером? (другими словами, как добраться до владельца файла изнутри кода? - person Tony; 27.12.2011
comment
@Tony: Дайте им ссылку на него, подключив розетку или установив привязку. - person Peter Hosey; 27.12.2011

Я знаю, что это старая тема, но я подумал, что добавлю к ней, так как я провел довольно много исследований по репрезентируемому объекту. Надеюсь это поможет!

representedObject - это ссылка на некоторые AnyObject (NSObject), которые должно представлять представление.

Это НЕ копия объекта, а ссылка на него (как в Swift, так и в Objective-C)

В идеале, если рассматриваемое представление - это страница из "приложения контактов". Эта страница represents a contact, а затем представленный объект должен быть установлен в fooContact объектом, создавшим его. fooContact является ссылкой на экземпляр рассматриваемого контакта.

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

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

weak var document: Document{
    if let docRef = self.representedObject as Document {
        return docRef
    }
    return nil
}

поддержание слабой ссылки позволит избежать ссылочных циклов.

person Adrian Sluyters    schedule 08.08.2015
comment
Вы не можете так использовать weak ref, вы также не можете вернуть nil. Весь ваш код может быть вычтен, чтобы вернуть представленный объект, переданный в Document? слабый документ var: документ? {вернуть представленный объект как? Документ} - person Ben Affleck; 30.08.2015
comment
Я собирался сказать то же самое. Это должно быть предупреждение с preconditionFailure (или просто fatalError). Если это был случай, когда вы хотите вернуть необязательный параметр, тогда будет достаточно простого return self.representedObject as? Document, без if-let или guard-let. - person Mark A. Donohoe; 16.04.2018