从UITableViewController - iPhone传递NSMutableArray到DetailView

时间:2012-09-02 08:42:09

标签: iphone objective-c xcode nsmutablearray uitableview

我有一个UITableViewController,在点击一个单元格时会显示另一个UITableViewController。我有一个NSMutableArray,我想在实例化时传递给新的UITableViewController。

我通常会这样做:

- (void)loadStationList {

 StationListView * listView = [[StationListView alloc] initWithNibName:@"StationListView" bundle:nil];
 listView.dataList = newParser.stationData;
 // ...
 // Pass the selected object to the new view controller.
 NSLog(@"New Parser is %d", [newParser.stationData count]); //This is fine - all objects in array here.
 [self.navigationController pushViewController:listView animated:NO];

}

奇怪的是dataList(新类中的NSMutableArray指针)是空的(我正在检查委托方法的行数)。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
NSLog(@"Data List is %d", [dataList count]);
return [dataList count];

}

我尝试了几种不同的方法(例如在父类中实例化一个新的NSMutable数组),但似乎没有任何工作。这可能与ARC有关,因为我对ARC仍然相对较新。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

您是如何声明dataListnewParser.stationData的? 应该是这样的

@property (nonatomic, strong) NSMutableArray       *dataList;

无论如何,为了确保您不会丢失任何值,您可能希望将每个元素从newParser.stationData复制/分配到dataList。 像这里:

    NSMutableArray * dataList = [[NSMutableArray alloc] init];
    for (id arrayElement in newParser.stationData) {
        [dataList addObject:arrayElement];
            }

尝试使用此代替简单作业listView.dataList = newParser.stationData;。 ps不要担心效率这太快就无所谓了。

答案 1 :(得分:0)

我通过在app委托中创建了一个实例变量然后从那里保存并读取数组来解决这个问题。这看起来像是弧中的错误 - 它适用于其他变量类型。