1

我正在编写一个应用程序,它在私人服务器上进行在线搜索并向用户显示结果。我想使用表格视图来显示结果。

我能做的是:发送数据、接收响应并解析 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];
4

1 回答 1

0

在我看来,你应该使用 SOAP http://en.wikipedia.org/wiki/SOAP

SOAP,最初定义为简单对象访问协议,是一种协议规范,用于在计算机网络中实现 Web 服务时交换结构化信息。它的消息格式依赖于可扩展标记语言 (XML),并且通常依赖于其他应用层协议,最显着的是超文本传输​​协议 (HTTP) 和简单邮件传输协议 (SMTP),用于消息协商和传输。

于 2012-09-18T14:31:03.597 回答