gpt4 book ai didi

ios - Obj-C - 为字典中的第一个值过滤 TableView 中返回的数据?

转载 作者:行者123 更新时间:2023-11-28 21:04:00 25 4
gpt4 key购买 nike

我有一个 TableView ,它从我的数据库中提取数据,并将其显示在我的 TableView 单元格中。返回值是:

 This is the messages data (
{
body = "13-10-2017 12:12";
name = "Leeya";
},
{
body = "09-10-2017 19:37";
name = Leeya;
},
{
body = "test";
name = "Jessica";

}

就是说,当我的字典返回包含相同“名称”值的多个数组时(在本例中为“Leeya”),我只希望我的表格 View 显示这些数组中的第一个(一个单元格) ,就像在聊天应用程序中看到对话列表一样。

我目前使用的代码实现了这一点,但它实际上只返回一个单元格和一个数组,由最近发布的数据填充。例如。 tableview 返回单元格:

LEEYA

什么时候返回:

LEEYA
JESSICA

请参阅下面的代码。我认为这是因为行

NSString *nodeTitle = self.messages[0][@"name"];

始终等于一个用户名,因此它返回一个值。

所以我的问题是:我怎样才能让那行函数“如果字典 self.messages 中的‘name’值出现不止一次,只显示第一个值”? 或者换句话说: 如果'name'值等于后面数组中的'name',只显示第一个?

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

NSString *nodeTitle = self.messages[0][@"name"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", nodeTitle];
NSArray *filteredArray = [self.messages filteredArrayUsingPredicate:predicate];
id firstFoundObject = nil;
firstFoundObject = filteredArray.count > 0 ? filteredArray.firstObject : nil;
NSDictionary *firstObjects = firstFoundObject;
NSLog(@"The first objects are %@", firstObjects);
static NSString *PointsTableIdentifier = @"MyMessagesCell";

MyMessagesCell *cell = (MyMessagesCell *)[tableView dequeueReusableCellWithIdentifier:PointsTableIdentifier];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyMessagesCell" owner:self options:nil];
cell = [nib objectAtIndex:0];


}

我希望我解释清楚了。谢谢!

最佳答案

我建议不要在 cellForRowAtIndexPath 中尝试这样做。

相反,当您第一次从服务器获取数据时,编写一个方法来获取输入数组并过滤它以删除重复项。像这样:

- (NSArray *) UniqueEntriesForArray: (NSArray *) sourceArray {
NSMutableArray *results = [NSMutableArray array];
NSMutableSet *uniqueStrings = [NSMutableSet new];
for (NSDictionary *element in sourceArray) {
NSString *name = element[@"name"];
if (![uniqueStrings contains: name]) {
[uniqueStrings addObject: name];
[results addObject: element];
}
}
return [results copy];
}

(我的 Objective-C 有点生疏,所以可能需要一些调整。如果你为 Objective-C 使用新的类型化数组语法,它也会更干净,但我不记得我的顶部头。)

关于ios - Obj-C - 为字典中的第一个值过滤 TableView 中返回的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46761069/

25 4 0
文章推荐: JavaScript 两个等于
文章推荐: python - Gio.MemoryInputStream 关​​闭时不释放内存
文章推荐: javascript - 使用 jQuery 更改