如何使用 NSMutableArray 填充表视图

Posted

技术标签:

【中文标题】如何使用 NSMutableArray 填充表视图【英文标题】:How to populate a table view with an NSMutableArray 【发布时间】:2015-11-11 02:17:10 【问题描述】:

我复制了示例代码以在我的应用程序中创建一个 Objective-C 表 (http://www.appcoda.com/uitableview-tutorial-storyboard-xcode5/)。该示例效果很好。

我遇到的问题是该示例使用了预定义的项目数组,但我的应用在加载视图控制器时生成了数组项目列表。

我的应用正在生成一个电影学分列表:

NSMutableArray *creditList;

在 viewDidLoad 我有:

creditList = [NSMutableArray arrayWithObjects:@"Test Movie 1", nil];

然后我生成电影列表。循环完成后,列表将正确存储在数组 creditList 中,具体取决于:

NSLog(@"creditList array: %@", creditList);

我现在如何使用生成的项目列表填充表格,我将把代码放在哪里?

提前致谢, 李

【问题讨论】:

【参考方案1】:

下面是步骤

    首先你必须有tableview和一个可重复使用的标识符,在这种情况下我只是把它叫做“cell”

    由于您已经拥有数组和数组中的值,因此您现在必须设置部分和行,正如您在此代码中看到的那样

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
         return 1;    
        
    
     - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
           return creditList.count; 
       
    

    现在您必须使用此代码设置实际的单元格

      - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
    
         cell.textLabel.text = [[creditList objectAtIndex:indexPath.row] capitalizedString];
    
         return cell;
      
    

【讨论】:

感谢您的步骤。由于它们与我提供的示例链接中的步骤基本相同,因此我得到了相同的结果(您在步骤 4 中显示),其中仅显示了数组的初始内容,而不是我使用时看到的完整数组: NSLog(@"creditList 数组:%@", creditList); 嗨@lee 所以基本上你是从网络服务获取电影的吧? 是的,Cesar,它们是使用 TMDb API 提取的,并作为 JSON 响应返回。这是填充数组的代码: while (myCount 所以首先在 viewdidload 中放 [[NSMutable Array alloc]init];然后在方法中填充数组放入 [self.tableView reloadData]; 我添加了 [[NSMutableArray alloc]init];进入 viewDidLoad,我收到了“未使用表达式结果”的软警告。我还添加了“[self.tableView reloadData];”在我发布显示正确 creditList 的 NSLOG 之后。当我运行该应用程序时,它仍然只显示 creditList 的原始内容('Test Movie 1)。塞萨尔,感谢您为提供帮助所付出的努力。【参考方案2】:

您可以使用NSMutableArrayNSArray 相同。无需再做任何事情。

物品生成后。你只需要打电话:

[tableView reloadData];

【讨论】:

感谢您的回复。当我在 NSLOG 语句之后将该代码放在 viewDidLoad 中时,我得到“未知接收器'tableview';你的意思是'UITableView'吗?”如果我将其更改为 UITableView,那么我会得到“No known class method for selector 'reloadData'”。 tableViewUITableView 的处理程序。 [tableView reloadData]; .. 有帮助【参考方案3】:

要使用您的数据填充表格,常用的设计模式是 UITableViewDelegate,在您的实现 (.m) 文件中添加委托,如下所示:

@interface ViewController () <UITableViewDelegate, UITableViewDataSource>

然后在同一个ViewController.m文件中调用两个函数,第一个是:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    return [_creditList count];
  

第二个功能:

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
          static NSString *cellName = @"cellNamedInStoryBoard";

       UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellName];

       if (cell == nil) 
       cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellName];
        

      cell.textLabel.text = [_creditList objectAtIndex:indexPath.row];
      NSLog(@"cell label created");

      return cell;
   

您需要在情节提要中设置数据源和委托,您可以通过右键单击表格视图并将其拖动到黄色的 ViewController 图标并选择委托和数据源来完成。

完成此操作后,如果您的数组填充了字符串,您应该会在运行应用程序时看到表格视图中列出的项目。

【讨论】:

感谢您的全面回复。您详细介绍的所有内容几乎都是我所拥有的,并且在我提供的我使用的示例的链接中。不幸的是,由于这个原因,我仍然在桌面上显示“测试电影 1”。

以上是关于如何使用 NSMutableArray 填充表视图的主要内容,如果未能解决你的问题,请参考以下文章

表视图的 NSMutableArray 与 NSDictionary

如何使用输入的文本字段填充 NSMutableArray

表视图中的 NSMutableArray 为空

UITableview 仅打印 NSMutableArray 的第一个对象,IOS

单击按钮时 NSMutablearray 到表视图

如何将检索到的对象从 parse.com 传递到 NSMutableArray 以与 UITableView 一起使用?