方法返回在委托中获得的结果

时间:2011-09-04 16:27:51

标签: iphone objective-c ipad

我有以下方法,它基本上试图从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;
}

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

通过调用“[facebook requestWithGraphPath:@”me / picture“andParams:nil andHttpMethod:@”GET“andDelegate:self];”你应该创建一个FBRequest的对象。

您可以自定义FBRequest,添加新的typedef

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

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

@end

也在实施中合成它。

在创建请求时,请指定您正在执行的请求类型(currentactiontype)。

当结果出现“ - (void)request:(FBRequest *)request didLoad:(id)result  检查请求和进程的类型。

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