xcode数组的数组和UITableViews

时间:2012-03-20 04:14:51

标签: nsarray uitableview hierarchical-data

我是Xcode和Objective-C编程的新手,需要一些帮助。

我希望为iOS创建一个使用分层数据和2个单独UITableViews的基本程序。我希望第二个UITableView由在viewControllers之间传递的数组填充,该数组基于在第一个UITableView中选择的单元格/行。

程序编译但运行程序时出现SIGABRT错误。有人可以帮我修复SIGABRT并将mainArray传递给第二个tableView吗?

这是我走了多远。

我的代码:

ArrayTableViewController.h

@interface arrayTableViewController : UITableViewController
@property (nonatomic, strong) NSMutableArray *mainArray;
@property (nonatomic, strong) NSMutableArray *secondArray;
@property (nonatomic, strong) NSMutableArray *thirdArray;
@end

ArrayTableViewController.m

#import "ArrayTableViewController.h"
#import "table2.h"
@implementation arrayTableViewController
@synthesize mainArray, secondArray, thirdArray;

-(void) viewDidLoad {
[super viewDidLoad];
mainArray = [[NSMutableArray alloc] initWithObjects: secondArray,     thirdArray, nil];
secondArray = [[NSMutableArray alloc] initWithObjects: @"123", @"456",     nil];
thirdArray = [[NSMutableArray alloc] initWithObjects: @"78", @"90", nil];
}



- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [mainArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}


cell.textLabel.text = [mainArray objectAtIndex:[indexPath row]];

return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

table2 *table2Controller = [[table2 alloc] initWithNibName:@"table2" bundle:nil];
table2Controller.arrayForDisplay = [[mainArray objectAtIndex: [indexPath row]] objectAtIndex:1];
[self.navigationController pushViewController:table2Controller animated:YES];

}

@end

table2.h

#import <UIKit/UIKit.h>
@interface table2 : UITableViewController
@property (nonatomic, strong) NSArray *arrayForDisplay;
@end

table2.m

@implementation table3
@synthesize arrayForDisplay;

然后使用ArrayTableViewController.m

中使用的相同单元格配置样式

编辑:

进行必要的更改后,当我运行程序并选择一行时,我在下一行收到SIGABRT错误。

int main(int argc, char *argv[])
{
@autoreleasepool {
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([ArrayTableAppDelegate class]));
}
}

你会推荐什么?我应该关闭ARC并拨打我自己的版本吗?这样我就可以进入第二个tableView

1 个答案:

答案 0 :(得分:3)

第一个错误:

viewDidLoad方法中,您甚至在分配这些数组之前就创建了mainArray secondArraythirdArray作为元素。

第二个错误:

cellForRowAtIndexPath:方法中:

检查第cell.textLabel.text = [mainArray objectAtIndex:[indexPath row]];

实际上textLabel需要设置NSString值。但是你要设置一个数组。

修改

将值设置为textLabel,如下所示:

cell.textLabel.text = [[mainArray objectAtIndex:[indexPath row]] objectAtIndex:0];

实际上这将设置数组的第一个值。但这取决于你的要求。

编辑2:

arrayForDisplay是一个数组变量,但是您要在语句

中设置字符串变量
table2Controller.arrayForDisplay = [[mainArray objectAtIndex: [indexPath row]] objectAtIndex:1];

按如下方式进行:

table2Controller.arrayForDisplay = [mainArray objectAtIndex: [indexPath row]];