2011-08-22 59 views
1

我想張貼在牆上消息給當前用戶。在我處理請求之前,我正在驗證會話並授權它是否不會。我澄清了一些聲明和初始化變量。問題是這裏顯示的代碼在fbDidLogin-delegate方法執行之前執行。所以看起來Facebook對象在請求之前沒有有效的訪問令牌。我做了一個單身人士。下一次我運行它的程序,它的工作。Facebook的SSO和要求的iOS SDK

代表

- (void)fbDidLogin 
{ 
    NSLog(@"DEBUG: DID LOG IN"); 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"]; 
    [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"]; 
    [defaults synchronize]; 
} 

的viewController

Facebook *facebook = [SocialMedia sharedFacebookAuthorized]; 

     NSString *name = nil; 
     NSString *message = nil; 
     NSString *picture = nil; 

     if (self.didPassTest) { 
      // Code 
     } else { 
      // Code 
     } 

     NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
             name, @"name", 
             message, @"message", 
             picture, @"picture", 
             description, @"description", 
             link, @"link", 
             caption, @"caption", nil]; 

     [facebook requestWithGraphPath:@"me/feed" andParams:params andHttpMethod:@"POST" andDelegate:self]; 

SharedFacebook..function

+ (Facebook *)sharedFacebookAuthorized 
{ 
    [self sharedFacebook]; 

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

    NSArray *permissions = [[NSArray arrayWithObjects:@"email", @"read_stream", @"publish_stream", nil] retain]; 

    NSLog(@"START?"); 

    if (![facebook isSessionValid]) { 
     [facebook authorize:permissions]; 
     NSLog(@"INSIDE?"); 
    } 

    NSLog(@"CONTINUE?");  
    return facebook; 
} 

回答

1

這是一個異步任務。在向圖API請求任何內容之前,您必須等待授權異步調用完成。看到我在這裏回答類似的問題:How to react to asynchronous events (login)?

+0

dtuckernet:謝謝你的回覆,你明白我的問題。但是,我如何使用這些塊?我以前從未使用過。 – LuckyLuke

+0

這是一個介紹:http://pragmaticstudio.com/blog/2010/7/28/ios4-blocks-1 – dtuckernet

+0

dtuckernet:並沒有別的辦法?我需要有> 3.2這方面的工作,並在iOS的4 – LuckyLuke