2011-09-04 36 views
0

我有以下方法,它基本上試圖從facebook/twitter獲取用戶頭像。問題是結果將在委託中返回,因此profilePicture結果在由這兩個方法調用的委託中獲得。我如何處理這個問題?在委託中獲得的方法返回結果

- (NSString *) profilePicture 
{ 
    NSString * result; 
    if (facebook.isSessionValid){ 
     [facebook requestWithGraphPath:@"me/picture" 
          andParams:nil 
         andHttpMethod:@"GET" 
          andDelegate:self]; 
    } else if ([_twitter isAuthorized]){ 
     [_twitter getUserInformationFor:[_twitter username]]; 
    } 
    return result; 
} 
+0

我不知道我理解的問題。 。你想在獲取圖片時在委託類中調用一個方法嗎?然後,包含函數的類需要引用一個委託類,然後只需調用[delegate pictureFetched:result]而不是返回。委託需要實現的功能pictureFetched: – Accatyyc

+0

我基本上想要profilePicture返回從代理得到的圖像的URL,是否足夠清楚? – adit

回答

1

您正在將代表設置爲self。所以你需要實現facebook類在這個類中指定的協議方法。

在Facebook的API,該協議被命名爲FBRequestDelegate,你需要實現的方法是request:didLoad:

示例:this page

- (void)request:(FBRequest *)request didLoad:(id)result { 
    if ([result isKindOfClass:[NSArray class]]) { 
     result = [result objectAtIndex:0]; 
    } 
    NSLog(@"Result of API call: %@", result); 
} 
+0

我知道那... t他的問題是,我得到的結果是從委託中獲得的,但是我想在profilePicture函數 – adit

+1

@返回它,所以你不能這樣做。 facebook API調用是異步的,因此結果必須通過回調傳遞。您可以在技術上對API進行同步調用,但它會讓您的應用程序掛起以返回結果。 –

0

採取通過調用 「[Facebook的requestWithGraphPath:@」 我/圖片「andParams:nil和HttpMethod:@」GET「andDelegate:self];」你應該創建一個FBRequest對象。

您可以定製FBRequest,添加一個新的typedef

typedef enum 
{ 
    ... 
    currentactionProfilePictureAccess, 
    ... 
}currentaction; 

@interface FBRequest:<superclass> 
{ 
    ..... 
    currentaction currentactiontype; 
} 
..... 
@property(nonatiomic,asign) currentaction currentactiontype; 
.... 

@end

也能合成它的實現。

而在創建請求時指定您正在執行的請求類型(currentactiontype)。

當結果進來「 - (空)要求:(FBRequest *)要求didLoad:(ID)導致 檢查的要求和流程型

if(request.currentactiontype==currentactionProfilePictureAccess) 
{ 
    //call what ever you want. 
}