我有一个方法,它启动NSURLConnection来读取IP地址,并在连接完成加载后返回IP:
- (NSString *)getHansIP
{
self.returnData = [[NSMutableData alloc] init];
NSMutableURLRequest *getIpRequest = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://example.com"]];
[getIpRequest setHTTPMethod:@"GET"];
NSURLConnection *ipconn = [NSURLConnection connectionWithRequest:getIpRequest delegate:self];
[ipconn start];
return self.ipString;
}
问题是objective-c试图在连接尚未完成加载时返回IP地址(ipString)。我知道有一种简单的方法可以修复它,但通过这种方法,NSURLConnectionDelegate方法不会被执行,我需要didReceiveAuthenticationChallenge
方法和canAuthenticateAgainstProtectionSpace
方法。附言:希望你能理解我糟糕的学校英语:P
您不能直接从方法返回IP,也不能在不阻塞线程的情况下直接返回,而且您也不能真正做到这一点并处理身份验证问题。
您需要创建一个对象来管理它,该对象是连接的委托,在处理连接时将连接作为实例变量进行维护,并在完成后具有一个委托或完成回调块来传递IP。
您需要接受这样一个事实,即连接是异步的,并且不希望直接从方法返回IP。