cellForRowAtIndexPath未被调用 - 使用标记来标识TableView

时间:2014-07-27 19:04:15

标签: ios objective-c uitableview

我见过很多人问了类似的问题,但回答他们的问题不是我的答案。

1)我创建了一个带有空View Controller的单一视图应用程序。在那里,我用一个样式为Basic的原型单元格拖动了一个新的表视图(样式Plain)。

2)我正在尝试学习动态改变TableViews的行为,所以我有一个名为sectionRows的可变数组,它将包含每个部分的行数。目前,具有多行的单个部分将是一项成就:)

3)在我的ViewController.h中,我设置了委托

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

@end

我还可以从TableView控制拖动到ViewController Yellow-Circle并设置数据源和委托出口。

4)在我的ViewController.m中,我定义了一些全局变量

@interface ViewController ()
{
    NSMutableArray *sectionRows;
    UITableView *myTableView;
}

第一个是我的数据数组(包含每个部分的行数,第二个是指向我的TableView的指针,我使用数字View标签识别了&#39; 1&#39;。

5)在我的viewDidLoad中,我初始化了所有内容:

- (void)viewDidLoad
{
    [super viewDidLoad];

    myTableView = (UITableView *)[self.view viewWithTag:1];

    sectionRows = [[NSMutableArray alloc] init]; // Create sectionarray

    [sectionRows addObject:[NSNumber numberWithInteger:1]];

    myTableView.dataSource = self;
    myTableView.delegate = self;

    [myTableView reloadData];
}

正如您所看到的,我甚至确保我再次设置数据源和委托,但这没有任何区别。

5)我已经超载了3种方法。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSLog(@"Returning %@ rows", [sectionRows objectAtIndex:section]);
    return (NSInteger)[sectionRows objectAtIndex:section]; // the number referenced in the array...
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    NSLog(@"Returning %li sections", sectionRows.count);
    return sectionRows.count; // the size of the sectionRows array
}

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

    // Configure the cell...
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    cell.textLabel.text = @"xxx";
    NSLog(@"Setting cell to %@", cell);
    return cell;
}

现在,当我运行这个时,我得到NSLog返回确认,只有一个部分和一行:

2014-07-27 19:58:34.599 TableViewTests[12877:60b] Returning 1 sections
2014-07-27 19:58:34.600 TableViewTests[12877:60b] Returning 1 rows

但是,你可以看到没有调用cellForRowAtIndexPath。

我所看到的其他事情都没有指出我做错了什么。我正在做我认为我在另一个简单项目中成功做的事情(学习),但我必须以不同的方式做其他事情。

我缺少什么想法?

提前致谢

乔恩

1 个答案:

答案 0 :(得分:1)

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSLog(@"Returning %@ rows", [sectionRows objectAtIndex:section]);
    return (NSInteger)[sectionRows objectAtIndex:section]; // the number referenced in the array...
}

这是不正确的。您无法将从阵列中获得的内容转换为NSInteger。它是一个指针。假设您将NSNumber存储到数组中:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSLog(@"Returning %@ rows", [sectionRows objectAtIndex:section]);
    return [[sectionRows objectAtIndex:section] integerValue]; // the number referenced in the array...
}