Общие объекты в какао - PullRequest
       9

Общие объекты в какао

2 голосов
/ 28 января 2009

Я работаю с CoreData в Какао (не на основе документов). Моя проблема заключается в том, что я хочу получить доступ к одному и тому же NSArrayController из разных NIB. Но у каждого NIB есть свой экземпляр этого NSArrayController.

Теперь мой вопрос, как я могу генерировать sharedObjects (например, NSUserDefaultsController). Это мне очень поможет. Спасибо за ваши ответы. =)

Ответы [ 3 ]

5 голосов
/ 28 января 2009

Как правило, вы не хотите делить NSArrayController между кончиками. Вероятно, лучше иметь несколько NSArrayController (по одному на NIB), которые связаны с одной и той же базовой моделью. Если вы хотите, чтобы эта модель (например, NSArray) была глобальной для приложения, вы можете предоставить ее через делегат NSApplication (например, создать экземпляр своего собственного класса MyAppDelegate в MainMenu.nib и подключить выход delegate NSApplication к экземпляру вашего класса MyAppDelegate) , В других NIB вы можете затем привязать привязку NSArrayController contentArray к Shared Application.delegate.myArray (при условии, что MyAppDelegate предоставляет - через KVC-совместимые методы - привязку NSArray, называемую myArray). По сути, вы используете IB и MainMenu.nib для создания своего одиночного экземпляра MyAppDelegate.

Имейте в виду, что этот подход затрудняет модульное тестирование вашего приложения, поскольку в графе объектов теперь есть синглтоны, которые вы не можете смоделировать или заглушить во время тестирования. Было бы гораздо лучше создать NSWindowController или NSViewController для каждого вторичного (не MainMenu.nib) NIB и связать NSArrayController в этих кончиках с File Owner.myArray. Затем вы можете создать экземпляр NSWindowController или NSViewController, передав ему массив (или массив, соответствующий KVC-объекту) перед загрузкой вторичного NIB. Таким образом, вы можете проверить функциональность перьев в отдельности (используя макет или заглушку для массива).

2 голосов
/ 28 января 2009

Я не совсем уверен, что попытка повторно использовать NSArrayController - лучший выбор (мне нужно больше знать о вашем проекте, но я никогда не сталкивался с ситуацией, когда я делал бы что-то подобное), но вы может использовать статическую переменную внутри метода класса следующим образом:

+ (id)sharedObject;
{
    static id object = nil;

    if ( object == nil )
    {
        object = [[self alloc] init];
    }

    return object;
}

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

1 голос
/ 28 января 2009

Мэтт Галлахер (Matt Gallagher) имеет хорошее сообщение о синглетонах и других способах размещения "глобальных" данных в своем блоге, которые вы также можете проверить. Это немного более понятно, чем документация по Apple, и содержит ссылку на файл заголовка, который позволяет легко и просто создавать синглтоны практически из любого класса Cocoa.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...