IPhone:使用dispatch_async进行后台上传的文件上传
我想在后台运行应用程序时执行图像上载。我能够上传图像到服务器使用此链接上的代码。 我听说NSUrlConnection可以是异步的,它被用于eUploader。在我的代码中,我添加了一些额外的方法,将在用于eUploader的应用程序目录中创建一个文件。在创建文件的过程中,我不希望它在应用程序的主线程上创建,所以我用 在全局队列上调度\u async。这样我就不会在创建文件时阻塞主线程 如果我使用dispatch_sync没有问题,但是dispatch_async我在NSUrlConnection上放置断点时发现了一些奇怪的东西:IPhone:使用dispatch_async进行后台上传的文件上传,iphone,file,asynchronous,upload,background,Iphone,File,Asynchronous,Upload,Background,我想在后台运行应用程序时执行图像上载。我能够上传图像到服务器使用此链接上的代码。 我听说NSUrlConnection可以是异步的,它被用于eUploader。在我的代码中,我添加了一些额外的方法,将在用于eUploader的应用程序目录中创建一个文件。在创建文件的过程中,我不希望它在应用程序的主线程上创建,所以我用 在全局队列上调度\u async。这样我就不会在创建文件时阻塞主线程 如果我使用dispatch_sync没有问题,但是dispatch_async我在NSUrlConnecti
- (void)upload
{
我在断点处进行了调试,而不是执行if语句,调试器跳转到此方法的第一个返回语句。之后,我传递给此类的选择器从未被调用。这只发生在dispatch_async上,它在全局队列上的dispatch_sync上工作
有人知道如何解决这个问题吗
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_async(queue, ^{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
self.uploadIndex = 0;
ALAsset *asset = [self.assets objectAtIndex:0];
[[FileUploader alloc] initWithAsset:[NSURL URLWithString:@"http://192.168.0.3:4159/default.aspx"]
asset:asset
delegate:self
doneSelector:@selector(onUploadDone:)
errorSelector:@selector(onUploadError:)];
//[self singleUpload:self.uploadIndex];
[pool release];
});
有几件事需要改变
NSAutoreleasePool
,它不是必需的dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_async(queue, [[^{
self.uploadIndex = 0;
ALAsset *asset = [self.assets objectAtIndex:0];
[[FileUploader alloc] initWithAsset:[NSURL URLWithString:@"http://192.168.0.3:4159/default.aspx"]
asset:asset
delegate:self
doneSelector:@selector(onUploadDone:)
errorSelector:@selector(onUploadError:)];
} copy] autorelease]);
如果您使用的是ARC(您当然是,因为您应该是),那么就不需要
复制
或自动释放
很抱歉这么晚才添加了块内容…感谢您的回复…我已经尝试过了,但当我放置断点时,它给出了相同的结果。
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_async(queue, [[^{
self.uploadIndex = 0;
ALAsset *asset = [self.assets objectAtIndex:0];
[[FileUploader alloc] initWithAsset:[NSURL URLWithString:@"http://192.168.0.3:4159/default.aspx"]
asset:asset
delegate:self
doneSelector:@selector(onUploadDone:)
errorSelector:@selector(onUploadError:)];
} copy] autorelease]);