0

我以编程方式创建了一个 UITableView(不使用 XIB)。它读取一个包含 NSDictionary 对象的 NSMutableArray 的 *.plist 文件。我遇到的问题是:当我在 UITableView 中显示对象时,它永远不会在第 0 行显示对象。我知道这一点,因为我得到以下 NSLog 输出:

2009-06-01 10:02:34.566 Color[784:20b] array count = 4
2009-06-01 10:02:34.570 Color[784:20b] row = 3: Air
2009-06-01 10:02:34.570 Color[784:20b] row = 2: Earth
2009-06-01 10:02:34.571 Color[784:20b] row = 1: Water
2009-06-01 10:02:34.571 Color[784:20b] row = 0: Fire

在这种情况下,我将看到一张有水、土和空气(但没有火)的桌子。如果我添加另一个对象,则会出现 Fire,但不会出现新对象。因此,它始终是第 0 行的对象。

以下是一些相关代码:

@interface LoadViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource> {
    NSMutableArray *loadedObjects;
}

- (void)viewWillAppear:(BOOL)animated {
    self.loadedObjects = [self getCurrentData];
    NSLog(@"array count = %d", [self.loadedObjects count]); 
    [self.tableView reloadData];
    [super viewWillAppear:animated];
}

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

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
    static NSString *Identifier = @"Identifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:Identifier];
    if(cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:Identifier] autorelease];
        cell.showsReorderControl = YES;
    }
    NSUInteger row = [indexPath row];
    NSDictionary *obj = [self.loadedObjects objectAtIndex:row];
    cell.text = [obj objectForKey:@"Name"];
    NSLog(@"row = %d: %@", row, [obj objectForKey:@"Name"]);
    return cell;
}

在代码片段中,您还可以看到我对 NSLog 的输出。

当我从 NIB 填充 UITableViews 时,我从未遇到过这个问题。任何建议表示赞赏。

先感谢您。

4

1 回答 1

1

我觉得有点愚蠢,但也许这对其他人有用......

我在描述中没有提到(因为我认为它不相关)是我还实例化了 UINavigationBar 以在右上角有一个 Edit 按钮。简而言之,导航栏遮挡了表格中的第一条记录。

我看不到这个的原因是因为我这样做了:

[self.tableView addSubview:navBar];

所做的就是将导航栏“粘贴”到表格上,因此滚动无法显示丢失的行。当我将该行更改为:

[self.appDelegate.window addSubview:navBar];

我可以将第一条记录从导航栏下方拖出,因为它们随后成为同级视图。

我为这个放错地方的问题道歉。

于 2009-06-02T00:02:08.517 回答