Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.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
Ios 如何在此NSOperation实例中调用NSURLConnection的委托协议方法?_Ios_Nsurlconnection - Fatal编程技术网

Ios 如何在此NSOperation实例中调用NSURLConnection的委托协议方法?

Ios 如何在此NSOperation实例中调用NSURLConnection的委托协议方法?,ios,nsurlconnection,Ios,Nsurlconnection,您好,我已经在iOS测试中完成了这个QCM。我的选择是B,这是错误的。我希望有人能帮我理解。先谢谢你 问题是: NSURLConnection实例是在并发NSOperation的start方法的实现内部创建和启动的 在此NSOperation实例中,应更改哪些内容以进行NSURLConnection的委托协议方法调用 -(void)start{ ... _connection = [[NSURLConnection alloc] initWithRequest: request dele

您好,我已经在iOS测试中完成了这个QCM。我的选择是B,这是错误的。我希望有人能帮我理解。先谢谢你

问题是: NSURLConnection实例是在并发NSOperation的start方法的实现内部创建和启动的

在此NSOperation实例中,应更改哪些内容以进行NSURLConnection的委托协议方法调用

-(void)start{
  ...
  _connection = [[NSURLConnection alloc] initWithRequest: request delegate:self      startImmediately:NO];
  [_connection scheduleInRunloop: [NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
  [_connection start];
  ... }
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
  {
  NSLog(@"Called"); }
有三个答案: 答:立即将StartImmediate设置为YES

B:将此代码包装为dispatch\u asyncsdispatch\u get\u current\u queue,^{}


C:没什么,我们会打电话给接管人

此代码示例选项C无需更改

将startImmediately设置为YES选项A只会在将连接调度到适当的运行循环之前启动连接,这会导致问题

理论上,您可以将连接的创建分派到主线程选项B,从而消除在主运行循环上手动调度连接的需要。但是,您的代码示例在主运行循环上手动调度它可以完成同样的事情,并且是更常见的模式


总之,您现有的代码示例很好。

您的代码片段看起来很好。显然,NSOperation子类还有很多,但我假设您也实现了它。isAsynchronous/isConcurrent是否返回TRUE?这是在NSOperation子类中创建NSURLConnection的有效方法。您不应立即将“开始”设置为“是”。您也不需要进行异步调度。您是说提供的代码段有问题吗?我不清楚问题出在哪里。@Rob我想问题是,当NSOperation添加到队列中时,需要做些什么来确保自动调用NSURLConnectionLegate方法didReceiveResponse:。。我猜这是假设一个有效的回答。按照你所说的,我想答案应该是C,代码很好,就像现在一样。。。当您将其添加到操作队列时,会调用start,操作队列会正确设置NSURLConnection,而NSURLConnection会在响应完成时调用其委托received@LouisTur同意。是的,我也在说C。我只是想弄明白他为什么问这个问题,因为我想如果一切顺利的话,他不会问这个问题。我实际上假设他没有看到他的委托方法因为某种原因而被调用,并且正在抓住可能的解决方案。如果是这样的话,问题显然就在他的代码的其他地方。可能是isAsynchronous/isConcurrent没有返回TRUE时出现了一些问题。或者从isFinished返回错误的值。或者在以前的操作中没有执行必要的KVN。或者…顺便说一句,我知道你知道这一点,但是当你把start添加到队列中时,它显然不会被调用。它在队列开始操作时调用。如果它落后于队列上的其他操作,或者您所做的其他操作,则在其他操作完成之前,它不会启动。@LouisTur谢谢各位。事实上,当NSOperation添加到队列中时,会自动调用didReceiveResponse:。