Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.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
Objective c 调度\u异步冲突_Objective C_Ios - Fatal编程技术网

Objective c 调度\u异步冲突

Objective c 调度\u异步冲突,objective-c,ios,Objective C,Ios,目前我正在开发一个聊天应用程序,我正在尝试上传图像,除了图像上传UI冻结外,其他一切都正常,所以异步方法进入了场景,这就是我正在尝试做的: - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ [self dismissModalViewControllerAnimated:YES]; disp

目前我正在开发一个聊天应用程序,我正在尝试上传图像,除了图像上传UI冻结外,其他一切都正常,所以异步方法进入了场景,这就是我正在尝试做的:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{

    [self dismissModalViewControllerAnimated:YES];
        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);
        dispatch_async(queue, ^{

        UIImage *image = [info objectForKey: UIImagePickerControllerOriginalImage]; 
        NSData *imgData = UIImageJPEGRepresentation(image, 1.0);

        //[self performSelectorOnMainThread:@selector(send:) withObject:imgData waitUntilDone:YES];

        [self send:imgData];
});

}
我得到这个错误:

试图从主线程以外的线程获取web锁 或者网络线程。这可能是由于从 次级线程。现在崩溃了

  • 网络线程锁
  • -[UITextView SETEXT:]
  • -[HPTEXTVIEW内部设置文本:]
  • -[HPGrowingTextView设置文本:]
  • -[chatViewController发送:]
  • __74-[chatViewController imagePickerController:didFinishPickingMediaWithInfo:][U block\U invoke\U 0
  • _调度、呼叫、阻塞和释放
  • _派遣工人2
  • _pthread_wqthread
  • 启动线程
  • 我使用HPGrowingTextView提供了一个类似于iMessage的可扩展键入区域,用于键入消息,但遇到了这个问题

    我搜索了这个错误

    试图从主线程以外的线程获取web锁 或者网络线程。这可能是由于从 次线程

    人们建议使用
    performSelectorOnMainThread
    ,但这种方法再次冻结了用户界面

    如何解决这一冲突或是否有其他方法

    Inside [self send:imageData]
    ...building a url and appending hFile(imageData)
    [body appendData:[NSData dataWithData:hFile]];
                [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
                // setting the body of the post to the reqeust
                [request setHTTPBody:body];
    
                NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
                NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
    
                NSString *imgUrl = [NSString stringWithFormat:@"http://www.www.www/uImages/thumbs/%@",returnString];
    ...
    

    上传后,图像的缩略图将返回,如果我使用
    [NSURLConnection sendAsynchronousRequest
    我将在uitableview中显示空缩略图。

    当您要更改UI中的任何内容时,应在主线程上执行

    因此,如果要更改现有
    HPGrowingTextView
    控件的文本,可以执行以下操作:

    dispatch_async(dispatch_get_main_queue(), ^{
        growingTextView.text = @"Some text";
    })
    

    由于在主线程外调用send,所以出现崩溃。堆栈跟踪很明显

    您需要在主线程上进行这些调用。但是,当您这样做时,您的UI当然会因为此调用而挂起

    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    
    从方法名来看,很明显,这个调用是同步的,并且将阻塞,直到返回结果

    因此,您需要改用异步表单

    sendAsynchronousRequest:queue:completionHandler:
    

    [自我发送:imgData];是吗?谢谢你的回复,这是一种图像上传方法。你100%确定是从主线程以外的线程调用UI,如果文件上传了,可能会弹出一个警报视图。好吗?这很糟糕,你应该在主线程上执行类似的东西。你能发布一些代码吗?我想你可能正在处理一个inte某些类型的rface元素,或执行某些接口处理的类。image正在上载到web上…无法发布所有代码,请检查我的帖子我正在编辑它。但我没有更改growingTextView文本。可能您没有显式更改它,但方法
    [HPGrowingTextView setText:]
    肯定是在方法
    [chatViewController send:
    中的某个地方调用的。很抱歉,我忘记了,实际上我正在更改文本增长文本视图。text=@“这是为了清除它,但现在在图像上载过程中,当我尝试在其中键入内容时,它再次崩溃,键入内容必须与主线程或第二线程有关?现在我在键入或更改文本时没有遇到错误,但当图像上载,然后我尝试发送文本消息时,我得到了这个-[UIButton bytes]:无法识别的选择器发送到实例0x863d8d0 2012-08-15 00:37:33.080 sendapp[763:15b03]***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[UIButton bytes]:无法识别的选择器发送到实例0x863d8d0'