ios xmpp研究探索:获取消息列表

- (void)fetchMessageListWithCompletion:(HYBMessageListBlock)completion {
  self.messageListBlock = completion;
  
  NSManagedObjectContext *context = [self messageContext];
  NSEntityDescription *entity = [NSEntityDescription entityForName:@"XMPPMessageArchiving_Message_CoreDataObject"
                                            inManagedObjectContext:context];
  NSFetchRequest *request = [[NSFetchRequest alloc] init];
  [request setEntity:entity];
  
  if (self.currentChatingBuddyJidString != nil) {
    // 过滤内容,只找我与正要聊天的好友的聊天记录
    NSString *jidString = [NSString stringWithFormat:@"%@@%@", _jid, kServer];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(bareJidStr like %@) && (streamBareJidStr like %@)", self.currentChatingBuddyJidString , jidString];
    request.predicate = predicate;
  }
  __block NSError *error = nil;
  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSArray *results =[context executeFetchRequest:request error:&error];
    NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:results.count];
    for (XMPPMessageArchiving_Message_CoreDataObject *object in results) {
      XHMessage *model = [[XHMessage alloc] initWithText:object.body
                                                  sender:object.bareJidStr
                                               timestamp:object.timestamp];
      [array addObject:model];
    }
    dispatch_async(dispatch_get_main_queue(), ^{
      if (completion) {
        completion(array, [error description]);
      }
    });
  });
}


获取消息列表,是需要过滤的,条件是:是我的好友且是我要查询的好友 的聊天记录:

 if (self.currentChatingBuddyJidString != nil) {
    // 过滤内容,只找我与正要聊天的好友的聊天记录
    NSString *jidString = [NSString stringWithFormat:@"%@@%@", _jid, kServer];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(bareJidStr like %@) && (streamBareJidStr like %@)", self.currentChatingBuddyJidString , jidString];
    request.predicate = predicate;
  }


先判断是否为空,如果当前没有正要聊天的好友,则不添加过滤条件,否则会崩溃。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值