如何从AppDelegate引用ViewController中的变量?

时间:2012-04-28 19:45:19

标签: iphone ios5

我的ViewController中有一个facebook变量,我想在AppDelegate方法中引用它。我该怎么做呢?

在我的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 个答案:

答案 0 :(得分:2)

  

我的ViewController中有一个我要引用的facebook变量   在我的AppDelegate方法中。

这听起来不是一个好计划 - 这意味着你的app委托依赖于这个视图控制器。

更好的设计可能让app delegate创建Facebook的实例并在其自己的ivar中保留对它的引用。然后,当它创建视图控制器时,它可以传递对Facebook实例的引用。这样,app委托和视图控制器都使用相同的Facebook对象,但他们并没有尝试访问彼此的实例变量。

答案 1 :(得分:1)

在AppDelegate中声明一个公共方法,它接受一个指向ViewController的指针。然后将接收的指针存储在AppDelegate中。一旦需要ViewController,只需使用存储的指针。

使用'facebook'的一个更丑陋的方法是将它放在一个全局变量中。