【问题标题】:objective-c wait until NSURLConnection connection did finish loadingobjective-c 等到 NSURLConnection 连接完成加载
【发布时间】:2015-04-01 19:41:57
【问题描述】:

我有一个方法可以启动 NSURLConnetion 来读取 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

【问题讨论】:

    标签: ios objective-c nsurlconnection nsurlconnectiondelegate


    【解决方案1】:

    您不能直接从该方法返回 IP,无论如何都不能不阻塞线程,而且您不能真正做到这一点并处理身份验证问题。

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

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

    【讨论】:

    • 好的。有没有办法通过处理身份验证挑战发出同步请求?
    • 仅当您可以在 URL 或标头中指定身份验证时。您不能与委托同步...
    • stackoverflow.com/q/4613067/3411191很好地解释了你的问题@user3708025
    • 您知道是否可以使用第三方框架/库,例如 AFNetworking?
    • 同步进行 - 不。 AFN 建立在NSURLConnection(或NSURLSession)之上,因此具有类似的限制
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多