2011-07-04 1 views
0

У меня есть AppDelegate вроде этого:Можно ли связать элементы управления, AppDelegate и UserDefaults без кодового?

@interface AppDelegate : NSObject <NSApplicationDelegate> { 
    NSString *boundValue; 
} 
@property (nonatomic, retain) NSString *boundValue; 

@end 

Я буду использовать boundValue для некоторых расчетов в режиме реального времени спустя внутри AppDelegate. В основном .xib У меня также есть NSTextField управление.

Итак, теперь я хотел бы связать как NSTextField, так и UserDefaults.boundValue ключом к моему AppDelegate.boundValue. И, конечно, я бы хотел сделать это с минимальным написанием кода.

Я нашел способ связать NSTextField либо с AppDelegate, либо с UserDefaults. Но как я могу привязать AppDelegate к UserDefaults? Как связать эти три части - контроль + делегировать + по умолчанию - вместе без дополнительных строк кода?

ответ

0

Вам нужно немного дополнительного кода:

@property (nonatomic, retain) IBOutlet NSString *boundValue; 

Теперь вы можете подключить в IB, как вы хотите, при условии, конечно, AppDelegate и userDefaults представлены в main.xib этими зелеными и синими кубиками ,

Edit: Вот довольно хороший учебник по связыванию предпочтения пользователя: Binding your preferences in Cocoa

+0

Ничего не изменилось ... Там нет ничего в Bindings Inspector для моего AppDelegate и SharedUserDefaultsController. Можете ли вы предоставить несколько шагов, как связать AppDelegate с UserDefaults (или наоборот)? –

+0

Я попытался добавить ObjectController для AppDelegate, но мне это тоже не помогло ... (поскольку я понимаю, что AppDelegate уже ссылается на жалобу в случае @property, поэтому ObjectController полностью отключен) –

+0

Whoa, slow down, do not паника. Да, свойства соответствуют привязкам, ключевое слово IBOutlet просто гарантирует, что выход отображается в IB. Единственная причина, по которой я упомянул контроллеры объектов, - это то, что вы случайно удалили их. По умолчанию appDelegate уже представлен объектным контроллером (синий куб). Выберите куб в IB и посмотрите раздел «Подключения» информационного окна: boundValue должно быть видимым как выход. Теперь вы можете ctrl-drag между кубами, представляющими appDelegate и userDefaults. Вот и все. –