我正在编写一个应用程序,它在私人服务器上进行在线搜索并向用户显示结果。我想使用表格视图来显示结果。
我能做的是:发送数据、接收响应并解析 XML 并将结果保存在数组中。
问题是:我无法访问存储响应数据的数组,超出方法:- (void)connectionDidFinishLoading:(NSURLConnection *)connection
。
但是我可以在这个方法中访问同一个数组。我是初学者,我很困惑。我创建了一个实例变量并使用方法中的 searchResults 数组进行了初始化connectionDidFinishLoading
,但是当我尝试从 Method:connectionDidFinishLoading 中访问该数组时,我总是收到错误消息:
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 2 beyond bounds for empty array
我只是不明白为什么这个实例变量只是局部初始化的。
所以问题是:如何从 Method: 访问从服务器获取的数据connectionDidFinishLoading
?
这是我的代码:
- (void)transmitXMLRequest:(NSData *)data{
NSURL *webServiceURL = [NSURL URLWithString:@"some_url"];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:webServiceURL];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setValue:@"text/xml" forHTTPHeaderField:@"Content-type"];
[urlRequest setHTTPBody:data];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];
responseData = [[NSMutableData alloc] init];
[connection start];
if (!connection) {
NSLog(@"Failed to submit request");
} else {
NSLog(@"Request submitted");
}
}
以及委托方法:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
// responseData is an instance variable.
[responseData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// responseData is an instance variable.
[responseData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
connection = nil;
responseData = nil;
NSLog(@"Connection failed! Error - %@ %@",
[error localizedDescription],
[[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
}
我只能在这种方法中访问数据:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"Succeeded! Received %d bytes of data",[responseData length]);
responseString = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];
NSLog(@"Received file: \n%@", responseString);
NSData *_data= [responseString dataUsingEncoding:NSUTF8StringEncoding];
xmlParser = [[XMLParser alloc]loadXML:_data]; // _data is the response from server
controller.searchResults = [[NSMutableArray alloc] init];
controller.searchResults = [xmlParser jobs];