0

Facebookに接続するiPhoneアプリケーションを作成しています。最初のView Controllerのボタンをクリックして接続しています。次に、2番目のボタンを追加して2番目のView Controllerを開きます。友人のリストをアルファベット順に表示したい.ネットで検索しましたが、アプリケーションに適用すると、実行時にクラッシュします助けてください-

私のデリゲートクラスで

 (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
    navController =[[UINavigationController alloc] initWithRootViewController:self.viewController];

    self.window.rootViewController = navController;

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@"FBAccessTokenKey"] 
        && [defaults objectForKey:@"FBExpirationDateKey"]) {
        facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
        facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
    }            
    [self.window makeKeyAndVisible];
    return YES;
}

-(void)fbDidLogin
{
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];        
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];        
    [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];              
}

読み込み中の友達のリストを表示したい2番目のView Controller

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.        
    NSArray   *_permissions = [[NSArray arrayWithObjects:@"read_stream", @"publish_stream", @"offline_access",@"read_friendlists",nil] retain];        
    [facebook authorize:_permissions];        
    facebook = [[Facebook alloc] initWithAppId:@"APP_ID_HERE" andDelegate:self];        
    [facebook requestWithGraphPath:@"me" andDelegate:self];
    [facebook requestWithGraphPath:@"me/friends" andDelegate:self];
  //  NSMutableDictionary*params = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"4",@"uids", @"name", @"fields", nil];
    [facebook requestWithGraphPath:@"me/friends" 
                         andParams:[ NSDictionary dictionaryWithObjectsAndKeys:@"picture,id,name,link,gender,last_name,first_name",@"fields",nil]
                       andDelegate:self];        
}

どんな助けでも大歓迎です。

4

1 に答える 1

0

問題#1:この行:

facebook = [[Facebook alloc] initWithAppId:@"XXXXXXXXXXXXX" andDelegate:self];

NSUserDefaults を読み取ってまだ初期化されていない Facebook オブジェクトにアクセスする前に、didFinishLaunchingWithOptions のアプリ デリゲートにある必要があります。ビューコントローラーからも削除する必要があります。

問題 #2: アプリ デリゲートとビュー コントローラーの両方で facebook 変数が宣言されているようです。アプリケーション全体で Facebook インスタンスを 1 つだけ持つ必要があります。ビュー コントローラーから呼び出す場合は、次のようにして、アプリ デリゲートに保存されている Facebook インスタンスへの参照を取得する必要があります。

Facebook *facebook = ((MyAppDelegate *)[[UIApplication sharedApplication] delegate]).facebook;

また、アプリ デリゲートに openURL メソッドを実装し、設定手順に従って plist ファイルに URL スキームを作成したことを確認する必要があります。

ps。AppId を公開フォーラムに投稿しないでください。

于 2012-05-17T06:58:40.870 に答える