在我的一个应用程序中,我想异步调用我编写的一个php页面(http://serveradress/page.php?date = 20111231),我肯定会知道该页面是否可以调用(没有404错误,php服务器关闭,自定义404页面,缺少互联网连接,或类似的东西)。 我已经计划让php页面返回一个非常简单的HTML页面,其主体或标题只有“OK”。
这将是一个“幻影”调用,不使用任何UIWebView,或者如果真的是nedded,隐藏的UIWebView,但我宁愿避免这种情况。
你能帮我写这个电话吗? 并确定知道它是否已被加载?
我看到我应该使用NSURLConnection,但我有点失落。
你能帮帮我吗?
答案 0 :(得分:4)
NSURLConection是异步加载的非常好的解决方案。创建一个步骤的步骤很少。
<强> 1。设置您的NSURLConnection
- (void)viewDidLoad {
// your code...
responseData = [[NSMutableData alloc] init];
NSURL *url = [NSURL URLWithString:@"http://yourdomain.com/"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]];
}
responseData
是你的NSMutableData iVar。
<强> 2。实施委托方法
a)在此方法中,我们将检查HTTP状态代码
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
if ([response respondsToSelector:@selector(statusCode)]) {
int statusCode = [((NSHTTPURLResponse *)response) statusCode];
if (statusCode >= 400) {
[connection cancel];
NSDictionary *errorInfo = [NSDictionary dictionaryWithObject:[NSString stringWithFormat:NSLocalizedString(@"Server returned status code %d",@""),statusCode] forKey:NSLocalizedDescriptionKey];
NSError *statusError = [NSError errorWithDomain:NSHTTPPropertyStatusCodeKey code:statusCode userInfo:errorInfo];
[self connection:connection didFailWithError:statusError];
}
}
}
b)这会创建您的NSData组件
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[responseData appendData:data];
}
c)处理成功的网址连接
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// do whatever you want using responseData as your server output
}
d)处理错误
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
// handle your error
}
您可以使用[error userInfo]
获取错误信息,并在UIAlertView中显示它。
因为我说NSURLConnection是非常好的解决方案,但你还应该看ASIHTTPRequest library。 :)