如何将NSMutableArray用作UITableView的DataSource

时间:2011-02-08 21:00:46

标签: ios uitableview iphone-sdk-3.0 ios4 nsmutablearray

我有一个带有数据的NSMutableArray(硬编码)。

我实现了这两个TableView方法,在IB中,我设置了委托和数据源

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

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

    if (!cell) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"] autorelease];
    }

    cell.textLabel.text = [myArray objectAtIndex:[indexPath row]];
    NSLog(@"Cell is %@", [myArray objectAtIndex:indexPath.row]);
    return cell;
}

数据不会出现在TableView中。我已经运行了NSLog,我可以看到数据在myArray中。

我将NSLog添加到代码中,似乎代码永远不会执行。问题是我的数组是如何创建的?

这是代码

- (id)init:(NSMutableArray *)theArray
{
    [super init];
    countryTable.delegate = self;
    countryTable.dataSource = self;

    UITapGestureRecognizer * tapRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTapped:)] autorelease];
    [window addGestureRecognizer:tapRecognizer];

    myArray = [[NSMutableArray alloc] init]; 
    myArray = theArray;
    return self;
}

3 个答案:

答案 0 :(得分:5)

你的基本代码是正确的,只需要有一个数组(你在这里没有提供),所以这就是一个例子:

NSMutableArray *myArray = [NSMutableArray arrayWithObjects:@"One",@"Two",@"Three",nil];

你可以NSLog这个:NSLog(@"Count: %i, Array: %@",[myArray count], myArray);

输出:哪个应按照您的示例{/ 1}} 返回

  

数:3,数组:(       “一”,       “二”,       “三”   )

您还应该确保在标题中设置cell.textLabel.textUITableViewDelegate协议。

答案 1 :(得分:1)

我不知道问题是否仍然存在,但我试一试。

当我读取你的代码时,我无法看到countryTable被实例化的位置,所以我认为它在InterfaceBuilder中是连接的?如果是这种情况,countryTable仅在viewDidLoad之后有效。 但是你也可以在InterfaceBuilder中设置delegate和dataSource。

顺便说一下,每次更改数据源(myArray),都要调用countryTable.reloadData。

答案 2 :(得分:0)

试试这个 -

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