FBRequestDelegate didReceiveResponse如何找出此响应的请求

时间:2011-03-04 16:52:08

标签: ios facebook facebook-graph-api facebook-ios-sdk

我正在使用facebook最新的iphone sdk,我正在从我的应用程序中的不同地方向facebook发出多个请求。对于他们所有的didReceiveResponse和didLoad方法被调用,很难从didLoad方法中找出这个响应是什么请求所以我想知道didReceiveResponse是否可以提供帮助,我可以在这个方法中检索一些信息,它会告诉我什么是我收到回复的请求。

4 个答案:

答案 0 :(得分:1)

我这样做的方式与Ziminji完全相同,但在didLoad方法中:

- (void)request:(FBRequest *)request didLoad:(id)result
{
    NSLog(@"Facebook request %@ loaded", [request url]);

    //handling a user info request, for example
    if ([[request url] rangeOfString:@"/me"].location != NSNotFound)
    {
        /* handle user request in here */
    }
}

所以基本上你只需要检查你发送请求的网址,你也可以检查该请求的参数。然后你可以区分彼此。

答案 1 :(得分:0)

我在这里所做的就是我正在检查响应中的一些独特属性并将其与请求相关联,我知道这不是最好的方法,但这是我到目前为止找到的,请让我知道是否有人在做任何不同的

答案 2 :(得分:0)

您可以尝试以下内容:

- (void) request: (FBRequest *)request didReceiveResponse: (NSURLResponse *)response {
    NSInteger statusCode = [(NSHTTPURLResponse *)response statusCode];
    if (statusCode == 200) {
        NSString *url = [[response URL] absoluteString];
        if ([url rangeOfString: @"me/feed"].location != NSNotFound) {
            NSLog(@"Request Params: %@", [request params]);

            UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Facebook" message: @"Message successfully posted on Facebook." delegate: nil cancelButtonTitle: @"OK" otherButtonTitles: nil];
            [alert show];
            [alert release];
        }
    }
}

答案 3 :(得分:0)

如果在创建请求对象时将其保留为请求委托的属性,则可以检查它是否与委托方法调用匹配。例如:

- (void)queryForUserInfo {
   self.userInfoRequest = [facebook requestWithGraphPath:@"me" andDelegate:self];
}


#pragma mark <FBRequestDelegate>

- (void)request:(FBRequest *)request didLoad:(id)result {
    if (request == self.userInfoRequest) {
       [self handleUserInfoResult:result];
    }
}