2012-07-17 63 views
3

所以我只是從xcode 4.2切換到4.3,現在我創建/使用單身的舊方法不起作用。所以我做了我的研究如何設置一個單身人士,我有這裏的代碼。XCode 4.3 Singletons

GlobalLogin.h

@interface GlobalLogin : UIViewController 
+(GlobalLogin *)sharedInstance; 
@end 

GlobalLogin.m

@implementation GlobalLogin 


#pragma mark - 
#pragma mark Singleton Methods 

+ (GlobalLogin*)sharedInstance { 

static GlobalLogin * sharedInstance; 
if(!sharedInstance) { 
    static dispatch_once_t oncePredicate; 
    dispatch_once(&oncePredicate, ^{ 
     sharedInstance = [[super allocWithZone:nil] init]; 
    }); 
} 

return sharedInstance; 
} 

+ (id)allocWithZone:(NSZone *)zone {  

return [self sharedInstance]; 
} 


- (id)copyWithZone:(NSZone *)zone { 
return self;  
} 

#if (!__has_feature(objc_arc)) 

- (id)retain { 

return self;  
} 

- (unsigned)retainCount { 
return UINT_MAX; //denotes an object that cannot be released 
} 

- (void)release { 
//do nothing 
} 

- (id)autorelease { 

return self;  
} 
#endif 

#pragma mark - 
#pragma mark Custom Methods 

所以我有所有的好,但我的問題是,我無法找到任何地方如何訪問不同的視圖控制器的信息需要使用它。所以,如果有人能指出我正確的方向,那將是非常感激。

回答

2

我不知道你爲什麼會叫+[super alloc],應該已經基本被ALLOC本身調用,但是我認爲你的意思-[super init],甚至本身就已經應該-init調用。更改初始閱讀

static GlobalLogin * sharedInstance; 
if(!sharedInstance) { 
    static dispatch_once_t oncePredicate; 
    dispatch_once(&oncePredicate, ^{ 
     sharedInstance = [[self alloc] init]; 
    }); 
} 

然後覆蓋-init並調用超:

-(id)init { 
    self = [super init]; 
    if (self) { 
     //initialization code here 
    } 
    return self; 
} 
+0

謝謝謝謝。你如何在視圖控制器上訪問它以更改/接收信息?在較舊的xcode中,它有如下簡單: GlobalLogin * global = [PlayersGlobal sharedUser]; 但現在不起作用 – nfoggia 2012-07-17 23:48:06

+1

你需要發送正確的類'sharedUser'消息,所以它應該讀'GlobalLogin * global = [GlobalLogin sharedUser];'當然,沒有理由這個東西是UIViewController如果你不打算展示它(它們可能會非常昂貴)。 – CodaFi 2012-07-17 23:51:28

+0

好的。感謝幫助的人 – nfoggia 2012-07-17 23:52:28