如何将一个类的数组解析为另一个类而另一个类的另一个?

时间:2011-08-20 04:36:18

标签: iphone objective-c variables global-variables

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 1 && indexPath.row == 0) {

    NSString *requestString = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/directions/xml?origin=%@&destination=%@,OK&sensor=false",startField.text,endField.text]; 

    NSURL *url = [[NSURL alloc] initWithString:requestString];
    NSData *tempData =[[NSData alloc] initWithContentsOfURL:url];

    NSString *Str  = [[NSString alloc] initWithData:tempData encoding:NSUTF8StringEncoding];



    NSLog(@"%@",Str);
    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];


    //Initialize the delegate.
    xml1 *parser = [[xml1 alloc] init];

    //Set delegate
    [xmlParser setDelegate:parser];


    //Start parsing the XML file.
    BOOL success = [xmlParser parse];

    if(success){
        NSLog(@"No Errors");
        arySteps=[[NSMutableArray alloc]init];
        arySteps=[parser.ListofSteps1 mutableCopy];

    }
    else
        NSLog(@"Error Error Error!!!");

    controller.arayStep=[[NSMutableArray alloc]init];
    controller.arayStep=[parser.ListofSteps1 copy];
    controller= [[TableView alloc] initWithNibName:@"TableView" bundle:nil];


     [self.navigationController pushViewController:controller animated:YES];
     [controller release];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

}

在上面的代码中,我已经解析了XML数据。在XML-parser文件中,我将数组中的存储对象设为ListofSteps1。现在我访问root视图控制器类,如上面的代码所示。所以在root-view类中ListofSteps1为根视图控制器的数组赋值。现在我想将根视图控制器的数组值分配给下一个视图的数组,该数组也在上面的代码中保存,但是下一个视图的数组没有获得值。这段代码有什么问题,所以没有价值?

1 个答案:

答案 0 :(得分:1)

上面的代码有几个问题。您只需在方法实现中的两个不同场合分配并初始化一个新数组:

arySteps=[[NSMutableArray alloc]init]; // This line serves absolutely no purpose
arySteps=[parser.ListofSteps1 mutableCopy]; // This line is sufficient on its own

在空指针上调用访问器方法对你来说绝对没有用。在尝试设置其属性之前,需要实例化对象:

controller= [[TableView alloc] initWithNibName:@"TableView" bundle:nil];
controller.arayStep=[parser.ListofSteps1 copy];

这些错误是非常基本的,表明你需要先处理基础知识才能进一步发展。我建议您选择一本关于Objective-C的好书 - 例如Programming in Objective-C by Stephen Kochan - 并仔细阅读。对核心概念的深刻理解将为您提供良好的发展。