相关疑难解决方法(0)

使用委托时,使用超时处理NSURLRequest

我正在使用NSMutableURLRequest连接到网站以获取JSON响应.我这样做是通过生成请求,然后使用NSURLConnection与self的委托来处理异步连接.我已经实现了所有正常的委托方法:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
Run Code Online (Sandbox Code Playgroud)

所有这些都可以完美地恢复数据,处理发生的任何错误等.但是,如果将NSURLRequest上的超时设置为10秒,我似乎不会在这些方法中调用(我希望调用didFailWithError).它只是永远坐在那里,我没有通知它超时.

阅读iPhone API文档我没有看到什么任何提及在发生超时时发生的,只是你可以设置超时值.应该怎么办?我没有在API中看到任何其他有用的委托方法.我不必手动检查超时,不是吗?超时仅适用于同步请求吗?

iphone timeout nsurlconnection nsurlrequest

10
推荐指数
1
解决办法
2万
查看次数

Cocoa:使用相同的委托函数检查多个异步NSURLConnections是否需要?

这是参考StackOverflow问题管理多个异步NSURLConnection连接

我有多个异步HTTP请求同时发出.所有这些都使用相同的NSURLConnection委托函数.(对于每个连接,receivedData对象在上面的另一个问题中指定的不同.在委托中,我解析receivedDate对象,并对这些解析的字符串执行其他操作)

到目前为止,一切正常,但我不确定是否需要做任何事情以确保正确的"多线程"行为.

  • 是否有可能两个以上的连接同时使用该委托?(我想是的)
  • 如果是,它是如何解决的?(Cocoa会自动执行此操作吗?)
  • 我是否需要进行额外的检查以确保每个请求都"正确"处理?

cocoa multithreading objective-c nsurlconnection

9
推荐指数
2
解决办法
8674
查看次数

区分委托中的NSURLConnection对象

我有两个请求一个接一个地开始.像这样开始请求

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.google.com"]];
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60];
NSURLConnection * connection = [[NSURLConnection alloc]
                                initWithRequest:request
                                delegate:self startImmediately:NO];
[connection scheduleInRunLoop:[NSRunLoop mainRunLoop]
                      forMode:NSDefaultRunLoopMode];
[connection start];
Run Code Online (Sandbox Code Playgroud)

和另一个这样开始的请求.

NSURL *url1 = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.apple.com"]];
NSURLRequest *request1 = [NSURLRequest requestWithURL:url1 cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60];
NSURLConnection *connection1 = [[NSURLConnection alloc] initWithRequest:request1 delegate:self];
[connection1 release];
Run Code Online (Sandbox Code Playgroud)

如何在委托方法中区分这两者?

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{}
Run Code Online (Sandbox Code Playgroud)

不希望为此目的保留任何额外的类变量.

cocoa nsurlconnection

5
推荐指数
1
解决办法
524
查看次数

NSURLConnection委托 - 确定触发委托的功能或连接

可能重复:
管理两个NSURLConnection
NSURLConnection委托

我有两种不同的方法可以调用不同的NSURLConnections;

方法A.

NSURLConnection *serverConnection = [[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:addressOfSideWebService]] delegate:self];
Run Code Online (Sandbox Code Playgroud)

方法B.

NSURLConnection *serverConnection = [[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:addressOfMainWebService]] delegate:self];
Run Code Online (Sandbox Code Playgroud)

问题是,这两个NSURLConnections都会触发相同的委托;

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [self.serverData appendData:data];
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{    
    NSString *response = [[NSString alloc]initWithData:self.serverData encoding:NSUTF8StringEncoding];
    // use data
}
Run Code Online (Sandbox Code Playgroud)

我想知道的是,我们可以标记NSURLConnections'或称为NSURLConnection的方法,以便识别我可以对其采取行动的函数或方法.

我们可以设置不同的代表,还是我应该遵循的任何其他方法?

我希望我很清楚,可以提供任何其他信息.谢谢.

iphone delegates nsurlconnection ios

2
推荐指数
1
解决办法
2348
查看次数

检查哪个请求来自NSURLConnection委托

检查委托方法中哪个请求的最佳方法是什么:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{

}
Run Code Online (Sandbox Code Playgroud)

现在我有一个NSURLConnection,我在发出请求之前设置为NSURLConnection,我在里面didReceiveResponse做:

if (self.tempConnection == connection)
Run Code Online (Sandbox Code Playgroud)

但是有可能这对竞争条件不起作用.有一个更好的方法吗?

iphone objective-c nsurlconnection ipad ios

0
推荐指数
1
解决办法
345
查看次数