0

这是我的代码:

//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.) 我怎样才能得到一个真正有效的超时方法?

非常感谢!谢谢!

4

1 回答 1

0

好吧,一秒钟的超时时间真的很低。如果要模拟不同的网络条件,可以使用类似这样的东西。你不需要这样的舞蹈:

NSData *loginData = [NSData dataWithContentsOfURL: login];
NSString *result = [[NSString alloc] initWithData:loginData encoding:NSUTF8StringEncoding];

您也不需要这个,因为连接已经开始:

[connection start];

同样来自文档

NSURLConnection 的委托方法——由 NSURLConnectionDelegate 协议协议定义——允许对象接收有关 URL 请求异步加载的信息回调。其他委托方法提供允许委托自定义执行异步 URL 加载过程的工具。在为关联的 NSURLConnection 对象启动异步加载操作的线程上调用这些委托方法。

所以对于你的问题:

于 2012-11-12T08:48:32.880 回答