伙计们,我正在使用以下代码从我服务器上的.php脚本中检索XML响应:
NSString *xmlString = [NSString stringWithContentsOfURL:[NSURL URLWithString:urlString]
encoding:NSUTF8StringEncoding error:&error];
和
//tried also: if(error)
if(!xmlString)
{
NSString * errorString = [NSString stringWithFormat:@"Unable to download xml data (Error code %i )", [error code]];
UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Error loading content" message:errorString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[errorAlert show];
[errorAlert release];
}
//*** now I have a touchXML xPath query code that extracts what I need from XML
我的.php脚本今天无法运行,我的iApp在没有任何警报,错误或通知的情况下冻结了吗?我认为上面的代码会处理错误,但它没有???
A)然后它捕获了什么类型的错误?
然后我记得我应该尝试使用NSURLConnection及其委托方法来捕获发生的任何错误。
//Inside viewDidLoad method
NSMutableData *responseData = [[NSMutableData alloc] init];
NSURL *baseURL = [[NSURL URLWithString:self.chosenDrawRss] retain];
NSURLRequest *request = [NSURLRequest requestWithURL:baseURL];
[[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];
NSString *xmlString = [[NSString alloc] initWithData:self.responseData encoding:NSUTF8StringEncoding];
我使用这种方法的问题是app在后台运行Connection并继续执行viewDidLoad中的其余代码,所以我不得不重新组织我的代码,将其移动到我调用的另一个方法委托方法connectionDidFinishLoading。我遇到的问题是我的委托方法没有被调用。好吧,除了 didFailWithError:之外的所有内容,如果我尝试加载不存在的URL。
更新 调用委托方法,但调用委托方法需要一分钟左右,直到警告消息弹出...
B)我可以使用stringWithContentsOfURL,如果发生任何事情,仍然会向用户发出警报吗?
C)如果没有,那么我需要帮助设置NSURLConnection方法?我的意思是,我在这里缺少的是为什么不调用我的委托方法?
我真的希望我的问题有意义:D →
答案 0 :(得分:0)
如果在didFailWithError
中调用了委托方法,那么我想它甚至会被调用
connectionDidFinishLoading
。通过在委托方法中启用断点来检查并跟踪流。在调用委托之前,函数可能已经发生了。
NSString *xmlString = [[NSString alloc] initWithData:self.responseData encoding:NSUTF8StringEncoding]
应在您的委托connectionDidFinishLoading
方法和中调用
- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[responseData appendData:data];
}
我不明白为什么警报会在一分钟后弹出,除非你在显示之前进行一些处理。