Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何使用NSURLConnection异步上传大图像?_Iphone_Ios_Facebook_Nsurlconnection_Grand Central Dispatch - Fatal编程技术网

Iphone 如何使用NSURLConnection异步上传大图像?

Iphone 如何使用NSURLConnection异步上传大图像?,iphone,ios,facebook,nsurlconnection,grand-central-dispatch,Iphone,Ios,Facebook,Nsurlconnection,Grand Central Dispatch,现在,我正在尝试使用将照片图像上传到Facebook。 我成功地从主线程上传了图像,但它阻塞了用户界面相当长的时间 所以,我尝试使用dispatch\u async来解决阻塞问题。通过使用调度队列,可以解决UI阻塞问题,但照片数据上传不再有效 NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: img, @"picture",

现在,我正在尝试使用将照片图像上传到Facebook。 我成功地从主线程上传了图像,但它阻塞了用户界面相当长的时间

所以,我尝试使用dispatch\u async来解决阻塞问题。通过使用调度队列,可以解决UI阻塞问题,但照片数据上传不再有效

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                               img, @"picture",
                               nil];
dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

[params retain];
dispatch_async(aQueue, ^{        
    [facebook requestWithMethodName:@"photos.upload"
                          andParams:params
                      andHttpMethod:@"POST"
                        andDelegate:self];
    [params release];
    dispatch_async(aQueue, ^{ [uploadingIndicator stopAnimating]; });
});
我认为这个问题与网络连接有关。FBConnect使用NSURLConnection将图像数据发布到facebook。若我从调度队列调用FBConnect API,那个么在调度队列线程中调用的NSURLConnection方法可能并没有运行循环

_connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
我尝试使用ScheduleUnlop。但是,没用

_connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[_connection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
我如何解决这个问题?有什么建议吗

比尔,
Wonil.

问题可能是您正在后台线程中运行多个UIKit方法。与UIKit的所有交互必须在主线程中完成,主线程处理所有用户输入

我不熟悉您使用的Facebook API方法,但它似乎与UIImage一起工作。如果您可以让它与备份CGImage一起工作,或者使用不与任何UIKit对象交互的其他方法,则可以解决此问题。(同样,我无法帮助您,因为我没有使用任何Facebook API。)此外,您需要从主线程调用
UIActivityIndicatorView
方法
stop animating

您可以这样设置队列:

dispatch_queue_t myQueue = dispatch_queue_create("anyName", NULL);

dispatch_async(myQueue, ^{   
    // upload image to Facebook, but without using UIKit methods

    dispatch_async(dispatch_get_main_queue(), ^{ 
        [uploadingIndicator stopAnimating]; 
    });
});
dispatch_release(myQueue);
这样,您可以在后台线程中完成繁重的工作,然后返回主线程以调用任何UIKit方法


更正:UIImage以及UIColor和UIFont都是UIKit对象的例外,这些对象可以在主线程之外安全地进行交互。UIKit的其余大部分不是线程安全的,当然包括UIImageView。(我经常在深夜混淆UIImage和UIImageView。)

问题可能是您在后台线程中运行了几个UIKit方法。与UIKit的所有交互必须在主线程中完成,主线程处理所有用户输入

我不熟悉您使用的Facebook API方法,但它似乎与UIImage一起工作。如果您可以让它与备份CGImage一起工作,或者使用不与任何UIKit对象交互的其他方法,则可以解决此问题。(同样,我无法帮助您,因为我没有使用任何Facebook API。)此外,您需要从主线程调用
UIActivityIndicatorView
方法
stop animating

您可以这样设置队列:

dispatch_queue_t myQueue = dispatch_queue_create("anyName", NULL);

dispatch_async(myQueue, ^{   
    // upload image to Facebook, but without using UIKit methods

    dispatch_async(dispatch_get_main_queue(), ^{ 
        [uploadingIndicator stopAnimating]; 
    });
});
dispatch_release(myQueue);
这样,您可以在后台线程中完成繁重的工作,然后返回主线程以调用任何UIKit方法


更正:UIImage以及UIColor和UIFont都是UIKit对象的例外,这些对象可以在主线程之外安全地进行交互。UIKit的其余大部分不是线程安全的,当然包括UIImageView。(我经常在深夜混淆UIImage和UIImageView。)

今天也有同样的问题,FBRequest的NSURLConnection在后台线程中运行时不会调用委托方法。(没有使用块)。这里有一个没有答案的类似问题:最终使用了AsiTpRequest,它在后台线程中运行良好。不过,解决方案可能微不足道。学习起来会很有意思。今天有同样的问题,FBRequest的NSURLConnection在后台线程中运行时不会调用委托方法。(没有使用块)。这里有一个没有答案的类似问题:最终使用了AsiTpRequest,它在后台线程中运行良好。不过,解决方案可能微不足道。我很想知道。