叫我嘗試調用一個IBOutlet,這是從另一個類一個Singleton對象的屬性,但它返回零。我讀過很多關於單身人士的其他帖子,但似乎有些東西我缺少。這是一個OSX問題。辛格爾頓IBOutlet中從另一個類返回nil
在Interface Builder中我有一個按鈕和一個單身的對象設置爲自定義類。 Singletons類被稱爲「CEOptionsST」。該按鈕作爲IBOutlet連接到Singleton的類別標題。
@property (weak) IBOutlet NSButton *mybutton;
後來我想從另一個類訪問按鈕的狀態。因此我打電話給:
CEOptionsST *opt = [CEOptionsST sharedOptions];
NSLog(@"state: %ld",(long)[[_opt mybutton] state]);
無論按鈕是打開還是關閉,總是返回0。使用文本域而不是按鈕返回nil。
指針是相同的登錄時self
從Singleton's和opt
內部。所以Singleton並沒有實例化兩次。 當我在調試模式下檢查opt
時,它告訴我所有的屬性都是零。 IBOutlet屬性「mybutton」爲零。所以由Interface Builder(或nib)啓動的Singleton對象與opt
相同,但mybutton和其他屬性的狀態不可訪問 - 我在想什麼?
什麼我正嘗試實現是有UI控件「選項」對於用戶來說,這是整個應用程序進行訪問。
Here's我的Singleton類(由Dave DeLong's answer):
@interface CEOptionsST : NSObject
+ (id) sharedOptions;
@property (weak) IBOutlet NSButton *mybutton;
@end
@implementation CEOptionsST
+ (void)initialize{
[self sharedOptions];
}
+ (id)sharedOptions {
static CEOptionsST *sharedOptions = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedOptions = [[self actualAlloc] initActual];
});
return sharedOptions;
}
+ (id)actualAlloc {
return [super alloc];
}
+ (id)alloc {
return [CEOptionsST sharedOptions];
}
- (id)initActual {
self = [super init];
if (self) {
}
return self;
}
- (id)init {
return self;
}
- (id)initWithCoder:(NSCoder *)decoder {
return self;
}
感謝, 托馬斯
使用allocWithZone:沒有幫助。但我非常樂意提供有關如何有效地將用戶界面按鈕或文本字段值傳遞給其他需要數據的類的建議。使用單例看起來像一個簡單的解決方案。 atm我正在使用應用程序委託類讀取iboutlet值,並將值傳遞給單例,以便其他類可以訪問它們。我認爲將插座直接連接到單身人士會更容易。 – 2014-09-25 13:34:13