Facebook请求线程问题

BOb*_*der 4 iphone multithreading facebook objective-c

好吧,我对线程有点新意,所以我有这个问题.我试图从Facebook获取朋友的信息,我不想在主线程上这样做.但由于某种原因,当请求不在主线程上时,回调永远不会被调用,我不知道为什么!

我有一个包含我朋友的所有ID的数组,并循环遍历这个数组,并创建一个自定义类Friend的对象(它获取我需要的所有信息)和每个ID.我将此对象添加到数组中.这个朋友对象向Facebook发出请求并处理响应以获取我想要的数据.

这是代码:

dispatch_async(dispatch_get_global_queue(0, 0), ^(void) {
            [self getFBFriendsInfo];
        }); 


 -(void)getFBFriendsInfo{

if (friendsInfoArray) {
    [friendsInfoArray removeAllObjects];
}
else{
    friendsInfoArray =[[NSMutableArray alloc]init];
}



for (int i=0; i<[UDID count]; i++) {
    NSString *udid = [UDID objectAtIndex:i];
    FriendsInfo *friend =[[FriendsInfo alloc] initWithFacebook:facebook andUdid:udid];
    [friendsInfoArray addObject:friend];
    [friend release];

}

dispatch_async(dispatch_get_main_queue(), ^(void) {
    [delegate friendsInfosAvailable:friendsInfoArray];
});
Run Code Online (Sandbox Code Playgroud)

}

在我的自定义类中我这样做:

[facebook requestWithGraphPath:udid andDelegate:self];
Run Code Online (Sandbox Code Playgroud)

有了这个回调从来没有被调用过!只有当我在主线程上执行请求时它才有效:

dispatch_async(dispatch_get_main_queue(), ^(void) {
    [facebook requestWithGraphPath:udid andDelegate:self];


});
Run Code Online (Sandbox Code Playgroud)

Lio*_*Lio 9

这就是为什么在不同的线程上你没有得到回应:

Facebook将使用NSURLConnection来执行请求.为了使连接正常工作,调用线程的运行循环必须在默认的运行循环模式下运行(读取NSURLConnection类引用).当您使用dispatch_async()时,没有运行循环在默认运行循环模式下运行(除非您在主调度队列上,因此在主线程上运行).因此,我认为甚至没有发送请求(如果您愿意,可以检查是否嗅探您的网络.).

因此,简而言之,您应该在主线程上提出请求; 因为它是异步的,它不会冻结你的应用程序.然后,如果响应的处理过于昂贵,请在后台处理.

我真的希望这会有所帮助.

我最好的.