我是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
?
答案 0 :(得分:3)
第一个错误:
在viewDidLoad
方法中,您甚至在分配这些数组之前就创建了mainArray
secondArray
和thirdArray
作为元素。
第二个错误:
在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]];