这是我的代码:
//login method
- (int) authenticateClient {
NSString *loginWeb = [NSString stringWithFormat:(@"http://192.168.118.1/login.php?uname=%@&pass=%@&submit=Log%%20In"), user, pass];
NSURL *login = [NSURL URLWithString:loginWeb];
NSData *loginData = [NSData dataWithContentsOfURL: login];
NSString *result = [[NSString alloc] initWithData:loginData encoding:NSUTF8StringEncoding];
NSMutableURLRequest *loginRequest = [[NSMutableURLRequest alloc] init];
[loginRequest setURL:login];
[loginRequest setTimeoutInterval:1];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:loginRequest delegate:self startImmediately:YES];
[connection start];
return [result integerValue];
}
我的问题是,当模拟没有网络连接时,我的应用程序冻结并且在指定的时间间隔内没有加载或超时(1秒钟只是为了查看它是否有效)。
我读了一些关于开始立即强迫进行当前威胁的事情,导致其他所有事情发生在"暂停"直到行动完成。
我有两个问题:
1。)让URL基本上在后台运行而不是暂停所有内容的更好方法是什么?
2.。)如何获得实际有效的超时方法?
非常感谢!谢谢!
答案 0 :(得分:0)
嗯,超时一秒真的很低。如果要模拟不同的网络条件,可以使用this之类的内容。你不需要这种舞蹈:
NSData *loginData = [NSData dataWithContentsOfURL: login];
NSString *result = [[NSString alloc] initWithData:loginData encoding:NSUTF8StringEncoding];
你也不需要这个,因为连接已经开始了:
[connection start];
同样来自documentation:
NSURLConnection的委托方法 - 由。定义 NSURLConnectionDelegate协议协议 - 允许对象接收 有关URL请求的异步加载的信息回调。 其他委托方法提供允许委托的设施 自定义执行异步URL加载的过程。这些 委托方法在启动的线程上调用 相关NSURLConnection对象的异步加载操作。
所以对于你的问题: