0

我的 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];

任何的想法?

4

2 回答 2

2

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

这听起来不是一个好的计划——这意味着你的应用程序委托依赖于这个视图控制器。

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

于 2012-04-28T19:57:19.010 回答
1

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

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

于 2012-04-28T19:51:33.730 回答