FBRequestDelegate didReceiveResponse 如何找出这个响应是啥请求
Posted
技术标签:
【中文标题】FBRequestDelegate didReceiveResponse 如何找出这个响应是啥请求【英文标题】:FBRequestDelegate didReceiveResponse how to find out for what request this response isFBRequestDelegate didReceiveResponse 如何找出这个响应是什么请求 【发布时间】:2011-03-04 16:52:08 【问题描述】:我正在使用 facebook 最新的 iphone sdk,我正在从我的应用程序的不同位置向 facebook 发出多个请求。对于他们所有的 didReceiveResponse 和 didLoad 方法都被调用,很难从 didLoad 方法中找出这个响应是什么请求所以我想知道 didReceiveResponse 是否可以提供帮助,我可以在这个方法中检索一些信息来告诉我什么是我得到响应的请求。
【问题讨论】:
【参考方案1】:我做的方式和紫敏机做的差不多,但是在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 */
所以基本上你只需要检查你发送请求的url,你也可以检查那个请求的参数。然后你就可以区别对待了。
【讨论】:
【参考方案2】:我在这里所做的只是检查响应中的一些独特属性并将其与请求相关联,我知道这不是最好的方法,但这是我迄今为止发现的,请让我知道是否有人这样做有什么不同
【讨论】:
【参考方案3】:您可以尝试以下方法:
- (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];
【讨论】:
【参考方案4】:如果您在创建请求对象时将其保留为请求委托的属性,则可以检查它是否与委托方法调用匹配。例如:
- (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];
【讨论】:
以上是关于FBRequestDelegate didReceiveResponse 如何找出这个响应是啥请求的主要内容,如果未能解决你的问题,请参考以下文章
FBRequestDelegate didReceiveResponse 如何找出这个响应是啥请求
选择通知操作时不会调用 userNotificationCenter(_:didReceive:withCompletionHandler:)
iOS:didCompleteWithError、didReceive 响应未由 URLSession.uploadTask 触发