iOS XMPP如何在tableview的单个部分中显示所有用户

Posted

技术标签:

【中文标题】iOS XMPP如何在tableview的单个部分中显示所有用户【英文标题】:iOS XMPP How to display all users in single section in tableview 【发布时间】:2016-12-13 11:32:19 【问题描述】:

我已经使用 NSFetchResultController 获取了 XMPP 用户,但它在一个部分中显示在线用户,在另一部分中显示离线用户,我想在一个部分中显示所有用户,我无法将所有用户组合在一起。如何在单个 tableview 部分显示。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 
 return [[[self fetchedResultsController] sections] count];
 

 - (NSString *)tableView:(UITableView *)sender titleForHeaderInSection:(NSInteger)sectionIndex
 
     NSArray *sections = [[self fetchedResultsController] sections];

     if (sectionIndex < [sections count])
     
         id <NSFetchedResultsSectionInfo> sectionInfo = sections[sectionIndex];

         int section = [sectionInfo.name intValue];
         switch (section)
         
             case 0  : return @"Available";
             case 1  : return @"Away";
             default : return @"Offline";
         
     

     return @"";
 


 - (void)configurePhotoForCell:(UITableViewCell *)cell user:(XMPPUserCoreDataStorageObject *)user
 
 if (user.photo != nil)
 
 cell.imageView.image = user.photo;
 
 else
 
 NSData *photoData = [[[self appDelegate] xmppvCardAvatarModule] photoDataForJID:user.jid];

 if (photoData != nil)
 cell.imageView.image = [UIImage imageWithData:photoData];
 else
 cell.imageView.image = [UIImage imageNamed:@"defaultPerson"];
 
 


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

        NSArray *sections = [[self fetchedResultsController] sections];

        if (sectionIndex < [sections count])
        
            id <NSFetchedResultsSectionInfo> sectionInfo = sections[sectionIndex];
            return sectionInfo.numberOfObjects;
        

        return 0;


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

    UITableViewCell * cell =(UITableViewCell *)[self.usersTable dequeueReusableCellWithIdentifier:@"users"];
    UILabel *nameLabel =(UILabel *)[cell viewWithTag:10];
    cell.selectionStyle=UITableViewCellSelectionStyleNone;

    XMPPUserCoreDataStorageObject *user = [[self fetchedResultsController] objectAtIndexPath:indexPath];
    nameLabel.text = user.displayName;
    return cell;


【问题讨论】:

【参考方案1】:

如何创建 fetchedResultsController?它负责按部分划分获取的实体。因此,您可以通过以下方式简单地创建它:

fetchedResultsController = [[NSFetchedResultsController alloc]
                                initWithFetchRequest:fetchRequest
                                managedObjectContext:self.managedObjectContext
                                sectionNameKeyPath:nil // pass nil here if you want single section
                                cacheName:nil];

【讨论】:

感谢您的帮助,请您帮助我返回 numberOfRowsInSection 和 numberOfSectionsInTable 的内容。 . 我有点困惑,但它就像魅力一样,你拯救了我的一天谢谢。 . . 在您的代码中,它返回fetchedResultsController 的部分数。但是由于 fetchedResultsController 初始化的改变,现在只有一个节,所以它返回 1 个节。这就是为什么不需要更改 fetchedResultsController 的原因。

以上是关于iOS XMPP如何在tableview的单个部分中显示所有用户的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中通过 xmpp 删除单个聊天?

如何使用 iOS 故事板创建具有两个嵌套 tableview 单元格 xib 的单个 tableview?

显示 TableView 部分标题和行 ios swift

如何在 TableView 的一个部分手动设置页脚(iOS)?

iOS Robby Hanson XMPP 框架资源

从单个数组数据和多个部分填充 tableView