0

AppDelegateメソッドで参照したいFacebook変数が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のallocinitです。

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

何か案が?

4

2 に答える 2

2

AppDelegate メソッドで参照したい ViewController に facebook 変数があります。

これは良い計画のようには思えません。アプリのデリゲートがこのビュー コントローラーに依存していることを意味します。

より良い設計では、アプリ デリゲートが Facebook のインスタンスを作成し、それへの参照を独自の ivar に保持するようにすることができます。次に、View Controller を作成するときに、Facebook のインスタンスへの参照を渡すことができます。このように、アプリ デリゲートとビュー コントローラーの両方が同じ Facebook オブジェクトを使用していますが、互いのインスタンス変数にアクセスしようとはしていません。

于 2012-04-28T19:57:19.010 に答える
1

ViewController へのポインターを受け入れる AppDelegate で public メソッドを宣言します。次に、受信したポインターを AppDelegate に格納します。ViewController が必要になったら、保存されたポインターを使用するだけです。

「facebook」を使用する醜い方法は、それをグローバル変数に配置することです。

于 2012-04-28T19:51:33.730 に答える