2012-08-10 19 views
1

我曾嘗試在我的應用程序委託中使用單例類,但是我一直無法獲得該功能。我還檢查了iAdSuite示例(尤其是containerBanner示例,因爲它似乎是最相對的),但我無法弄清楚。如果有更好的方法來完成這個,而不使用單身課程,你可以指向正確的方向,我真的很感激它。我的一些單身課程代碼如下。謝謝!如何在許多視圖控制器中創建一個iAd橫幅共享實例?

@interface App Delegate 

@property (assign) iAdController *iadc; 
+ (AppDelegate*) sharedApplication; 
- (iAdController*)sharedAd; 
@end 

@implementation AppDelegate 

@synthesize iadc; 

+ (AppDelegate*) sharedApplication 
{ 
return [[UIApplication sharedApplication] delegate]; 
} 

-(iAdController*)sharedAd 
{ 
    if(iadc==nil){ 
     iadc=[iAdController new]; 
    } 
    return iadc; 
} 


@interface ViewController 

iAdController*iadc=[[AppDelegate sharedApplication] sharedAd]; 
//here i get an error saying, "initializer element is not a compile-time constant. 

所有東西都輸入正確。如果還有什麼我應該發佈讓我知道。

回答

0

試着改變你的單身創建到這一點:

+ (LocationManagerSingleton*)sharedInstance { 

    static LocationManagerSingleton *_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;  
} 

- (id)init 
{ 
    self = [super init]; 
    if (self != nil) 
    { 
     // PERFORM any custom initialization here 
    } 
    return self; 
} 

顯然改變類的名稱。

每當你想用你的單身您的任何viewcontrollers的只是這樣稱呼它:

locationManager = [LocationManagerSingleton sharedInstance]; 

不要忘記在頭部添加

+ (LocationManagerSingleton*) sharedInstance; 

編輯

以及似乎我誤解了你的密碼(忘記我的答案,你只是希望能夠從任何地方訪問你的iAdController。所以只需將

添加的.M的內視圖控制器

@interface ViewController() 
{ 
    iAdController *iadc; 
} 

而且裏面的

-(void)viewDidLoad 
{ 
    iadc=[[AppDelegate sharedApplication] sharedAd]; 
} 

但導入應用delegate.h你想使用它的任何一個視圖控制器。

#import "AppDelegate.h" 

也有不應該是在@interface

+0

在AppDelegate的空間閱讀編輯,因爲我missunderstood你 – Pochi 2012-08-10 06:07:13

+0

我相信你的編輯是我最初嘗試的,它給了我一個錯誤,說「初始化元素不是編譯時常量」。任何想法如何解決這個問題,並使其工作?是否有另一種方法可以在整個視圖控制器中共享一個iAdbanner的單個實例,這將更容易實現?感謝您的幫助順便說一句:) – Dave123 2012-08-10 06:30:11

+0

關於編輯的重要事情是,它應該被放置在你的viewdidload或你想要在你想使用它的viewcontroller中使用它。你不能把它放在@interface之下。例如在viewcontroller.m文件中,必須有一個名爲viewdidload的方法。把它放在那裏,它會工作。如果你想讓它可用於整個類,你必須將指針放在實例變量中,並將其初始化爲viewdidload – Pochi 2012-08-10 06:58:28