我写了一个继承自UITableViewController的子类,其中一个函数会导致程序一启动就挂掉。我把那个函数给注释掉程序就不会出错了,那个函数是: - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [[masterColorList objectAtIndex:section] count]; } |
|
20分 |
[masterColorList objectAtIndex:section]
section 应该超过了 masterColorList 的 count, 做个测试。 还有个函数,numberOfSections 你返回的是多少。 |
15分 |
先问楼主怎么得到的section的多少的????把这个问题解决了后面的就好办了,还有一点,在加载TableView的内容时你的masterColorList不因该有其他操作!
|
15分 |
[masterColorList objectAtIndex:section] 要打印出来看看
|
只要是我把- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section这个函数注释掉程序就不会出错了,但是也就没有数据显示了。
|
|
我把代码贴出来,大侠们帮看看啊,刚刚开始自学,啥都不会啊,多谢了。
头文件 #import <Foundation/Foundation.h> @interface RootViewController : UITableViewController { NSArray *masterColorList; } @property(retain)NSArray *masterColorList; @end 代码文件: #import "RootViewController.h" #import "CoreGraphics/CGGeometry.h" @implementation RootViewController @synthesize masterColorList; - (id)initWithCoder:(NSCoder *)decoder { if (self = [super initWithCoder:decoder]) { NSArray *colorList = [NSArray arrayWithObjects: [NSDictionary dictionaryWithObjectsAndKeys:@"brownColor",@"titleValue",[UIColor brownColor],@"colorValue",nil], [NSDictionary dictionaryWithObjectsAndKeys:@"orangeColor",@"titleValue",[UIColor orangeColor],@"colorValue",nil], [NSDictionary dictionaryWithObjectsAndKeys:@"purpleColor",@"titleValue",[UIColor purpleColor],@"colorValue",nil], [NSDictionary dictionaryWithObjectsAndKeys:@"redColor", @"titleValue",[UIColor redColor],@"colorValue",nil], nil]; NSArray *otherColorList = [NSArray arrayWithObjects: [NSDictionary dictionaryWithObjectsAndKeys:@"RGB:0.25/0/0", @"@titleValue",[UIColor colorWithRed:0.25 green:0 blue:0 alpha:1],@"colorValue",nil], [NSDictionary dictionaryWithObjectsAndKeys:@"RGB:0.5/0/0", @"@titleValue",[UIColor colorWithRed:0.5 green:0 blue:0 alpha:1],@"colorValue",nil], [NSDictionary dictionaryWithObjectsAndKeys:@"RGB:0.75/0/0", @"@titleValue",[UIColor colorWithRed:0.75 green:0 blue:0 alpha:1],@"colorValue",nil], nil ]; masterColorList = [NSArray arrayWithObjects:colorList,otherColorList,nil]; [masterColorList retain]; } return self; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return masterColorList.count; } /* - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [[masterColorList objectAtIndex:section] count]; } */ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *MyIdentifier = @"MyIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; if (cell = nil) { cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease]; } cell.textColor = [[[masterColorList objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] objectForKey:@"colorValue"]; cell.selectedTextColor = [[[masterColorList objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] objectForKey:@"colorValue"]; cell.text = [[[masterColorList objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] objectForKey:@"titleValue"]; return cell; } - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { if (section == 0) { return @"SDK Colors"; } else if (section == 1) { return @"RGB Colors"; } return 0; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [[tableView cellForRowAtIndexPath:indexPath] setAccessoryType:UITableViewCellAccessoryCheckmark]; } - (void)dealloc { [super dealloc]; [masterColorList release]; } - (void)viewDidLoad { [super viewDidLoad]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; } - (void)viewWillDisappear:(BOOL)animated { } - (void)viewDidDisappear:(BOOL)animated { } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end |
|
回1楼,section应该没超啊,没法测试,只要是有那个函数,即便返回一个手工赋值的变量或者函数为空,也会导致程序挂掉。别:numberOfSections返回的是2。
回2楼,我把代码贴出来了,麻烦帮看下啊,我也不知道section怎么得到的。 回3楼,没法测试啊,那个函数在就会导致程序挂掉 |
|
在
– (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 中, if (cell == nil) 少了一个等号 建议以后写判断语句时,写成类似这样 |