的Objective-C等到NSURLConnection的连接没有完成加载

问题描述:

我有开始的NSURLConnetion读取一个IP地址的回报方法的IP连接没有完成加载后:的Objective-C等到NSURLConnection的连接没有完成加载

- (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; 
} 

的问题是客观-c尝试在连接尚未完成加载时返回IP地址(ipString)。我知道有一个简单的方法来解决它,但用这种方法NSURLConnectionDelegate方法不会得到执行,我需要的方法canAuthenticateAgainstProtectionSpace方法。 P.S.希望你明白我的不好的学校英语:P

你不能从方法中直接返回IP,不是不阻止线程,而且你也不能真正做到这一点,并处理认证问题。

您需要创建一个对象来管理这个连接的委托,在连接处理时将连接维护为实例变量,并且具有委托或完成回调块,以便在完成后将IP传回。

您需要认识到连接是异步的并且不想直接从方法返回IP。

+0

好的。有没有办法通过处理身份验证挑战发出同步请求? – user3708025 2015-04-01 19:52:00

+0

仅当您可以在URL或标题中指定auth时才可以。你不能与委托同步... – Wain 2015-04-01 19:56:13

+1

http://stackoverflow.com/q/4613067/3411191很好地解释你的问题@ user3708025 – 2015-04-01 19:59:54