2012-04-28 89 views
0

我在我的ViewController中有一個Facebook變量,我想在我的AppDelegate方法中引用。我該怎麼做呢?如何從AppDelegate引用ViewController中的變量?

在我的AppDelegate我想把這個,因爲它使用的UIApplication和所有其他裁判,在這個類:

// For iOS 4.2+ support 
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
     sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
     return [facebook handleOpenURL:url]; 
    } 

Facebook的變量是在我的ViewController .h文件中:

#import <UIKit/UIKit.h> 
    #import "FBConnect.h" 

    @interface ImportPicViewController : UIViewController <FBSessionDelegate, FBDialogDelegate>{ 
     Facebook *facebook; 
    } 
    @property (nonatomic, retain) Facebook *facebook; 
    @end 

並在.m文件中合成:

@implementation ImportPicViewController 
    @synthesize facebook; 

但它是在ViewController中的alloc init:

- (void)viewDidLoad 
    { 
     [super viewDidLoad]; 
     facebook = [[Facebook alloc] initWithAppId:@"224207854355440" andDelegate:self]; 

任何想法?

回答

2

我在我的ViewController中有一個facebook變量,我想在我的AppDelegate方法中引用 。

這聽起來不像一個好計劃 - 這意味着你的應用程序委託依賴於這個視圖控制器。

一個更好的設計可能會讓應用程序委託創建Facebook的實例並在它自己的ivar中保留對它的引用。然後,當它創建視圖控制器時,它可以傳入對Facebook實例的引用。這樣,應用程序委託和視圖控制器都使用相同的Facebook對象,但它們並不試圖訪問彼此的實例變量。

1

在AppDelegate中聲明一個公共方法,它接受一個指向你的ViewController的指針。然後將接收到的指針存儲在AppDelegate中。一旦你需要ViewController,只需使用存儲的指針即可。

一個醜陋的使用'臉譜'的方法是把它放在一個全局變量中。

相關問題