如何将动态行和节数组传递给 numberOfRowsInSection 和 cellForRowAtIndexPath

Posted

技术标签:

【中文标题】如何将动态行和节数组传递给 numberOfRowsInSection 和 cellForRowAtIndexPath【英文标题】:How To Pass Dynamic row and Section Array to numberOfRowsInSection and cellForRowAtIndexPath 【发布时间】:2018-02-09 12:18:56 【问题描述】:

我很多天都面临这个问题。请大家解决这个问题。

下面是我的 rows 数组,numberOfRowsInSection 应该传入哪个计数?

    (
        (
        "Service Speed",
        "Good Service",
        "Confirmation quality",
        "Quick Service in Reservation"
    ),
        (
        "Check In",
        "Happy on their Service",
        Courtesey,
        "Quick Service at Checkin"
    ),
        (
        "Front office & reception",
        "Overall Quality of Room",
        Check,
        "Response time"
    ),
        (
        "Room Decor",
        "Time taken to serveTime taken to serveTime taken t",
        Bathroom,
        "Facilities in the Room",
        "Choice of menu",
        Housekeeping,
        "Room Service"
    ),
        (
        "Overall Comments",
        "Will you come back again"
    ),
    "Guest Satisfaction Ratings"
  )

我的问题是,如何传递numberOfRowsInSection 中的行数组计数和cellForRowAtIndexPath 中的数组值?

我尝试使用以下代码,但出现错误:

"[__NSCFString count]: 无法识别的选择器发送到实例"

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

return [GroupName count];



-(UITableViewCell *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

return [GroupName objectAtIndex:section];


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

return [[RowsArr objectAtIndex:section] count];



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

  cell.Label.text = [[sections objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];


问题出在数组的最后一个对象中 “客人满意度评分”, 因为它来自 NSString,所以只有它显示错误。

【问题讨论】:

"Guest Satisfaction Ratings" 放入具有单个对象的数组中。它是由 api 服务器端而不是你纠正的。 好的,当然。感谢您的建议。 【参考方案1】:

Sh_Khan 走在正确的轨道上。您的问题出在以下行:

[[RowsArr objectAtIndex:section] count];

您需要确定要获取的对象的类型,例如:

if ([[RowsArr objectAtIndex:section] isKindOfClass:[NSArray class]]) 
    return [[RowsArray objectAtIndex:section] count];
 else 
    return 1;

一旦你这样做了,你也会遇到问题

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

因为这也假设你会得到一个数组。

换行:

cell.Label.text = [[sections objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];

为:

cell.Label.text = [[sections objectAtIndex:indexPath.section] isKindOfClass:[NSArray class]] 
    ? [[sections objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] 
    : [sections objectAtIndex:indexPath.section];

它会处理这两种情况。

编辑:不确定您从哪里获得sections,因此您可能需要将最后一个更改为:

cell.Label.text = [[RowsArr objectAtIndex:indexPath.section] isKindOfClass:[NSArray class]] 
    ? [[RowsArr objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] 
    : [RowsArr objectAtIndex:indexPath.section];

【讨论】:

这是问题.. sry @Evil.. 感谢您的反馈!声望低于 15 人的投票会被记录,但不会更改公开显示的帖子分数。.. 如果您单击答案旁边的灰色复选标记,您应该能够接受它作为答案@RohithSingh【参考方案2】:

你的问题来了

[[RowsArr objectAtIndex:section] count];

这个[RowsArr objectAtIndex:section]返回一个字符串而不是数组,所以count不能应用于字符串

您还发送RowsArr 的计数并在cellForRow 中访问sections arr

【讨论】:

你如何获得 RowsArr ,我的意思是发布它的相关初始化代码,它可能是 json 字符串数组

以上是关于如何将动态行和节数组传递给 numberOfRowsInSection 和 cellForRowAtIndexPath的主要内容,如果未能解决你的问题,请参考以下文章

如何通过传递对象使用 [ngstyle] 将网格行和网格列动态传递到角度 div 选项卡

如何将多维动态数组传递给C++中的函数

根据objective c中得到的json隐藏行和节

如何将函数中使用的数组传递给动态分配的main数组?

如何将字符串数组动态传递给Java中的SQL“IN”子句? [复制]

如何使用javascript动态地将json数组传递给数据表