【问题标题】:start all dialogs (chat room) to autodownload attachments in quickblox启动所有对话框(聊天室)以在 quickblox 中自动下载附件
【发布时间】:2015-02-06 14:33:14
【问题描述】:

我要实现的是自动下载附件功能,无需进入聊天室,使用 QuickBlox SDK iOS 版本 2.0.12,

为此,我想在登录后启动用户所属的所有对话(聊天室)。

使用当前的 api,用户可以看到对话列表(聊天室)并且一次只能进入一个房间。 因此,假设登录用户有 2 个聊天室(ChatRoom A,ChatRoom B),因此当他进入“ChatRoom A”时,他只能在 chatDidReceiveMessageNotification / chatRoomDidReceiveMessageNotification 中接收“ChatRoom A”的消息/附件作为通知。

因此,当用户收到“ChatRoom B”的消息/附件时,他将无法访问,直到他进入“ChatRoom B”。

为了让它工作,我在 DialogsViewController 中创建了以下方法: 正在尝试加入所有对话(聊天室)

-(void)startallrooms
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(chatDidReceiveMessageNotification:)
                                                     name:kNotificationDidReceiveNewMessage object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(chatRoomDidReceiveMessageNotification:)
                                                     name:kNotificationDidReceiveNewMessageFromRoom object:nil];
    QBChatRoom *chatRooms;

    for (int i=0; i<=self.dialogs.count; i++) {
        QBChatDialog *dialog = self.dialogs[i];
        chatRooms = [dialog chatRoom];
        [[ChatService instance] joinRoom:chatRooms completionBlock:^(QBChatRoom *joinedChatRoom) {
                // joined
        }];
    }   
}

并从 DialogsViewController 中的 completedWithResult 调用。

- (void)completedWithResult:(Result *)result{
    if (result.success && [result isKindOfClass:[QBDialogsPagedResult class]]) {
        [self startallrooms];
        ..
        ..
     }
}

在 ChatService.m 的以下方法中出现错误:EXC_BAD_ACCESS

- (void)chatRoomDidEnter:(QBChatRoom *)room{
}

但是当我尝试只加入一个聊天室时,它不会给我任何错误并且工作得很好。 (只需检查在我上面提到的 startallrooms 方法中用 this -> for (int i=0; ifor loop)

那么,我哪里出错了,即使我解决了这个问题,从内存的角度来看是否可以启动所有房间(如果用户有数千个房间)?在实现相同之后,我也会在 Android 上进行。

【问题讨论】:

    标签: android ios quickblox


    【解决方案1】:

    如果您查看 ChatService 类内部,您可能会看到成功后 -chatRoomDidEnter 将释放完成块。这意味着该方法的第二次调用将导致EXC_BAD_ACCESS。只是不要释放块。

    【讨论】:

      【解决方案2】:

      一次可以在多个房间里

      self.myRooms = [NSMutableArray array]; // strong property
      
      for (int i=0; i<=self.dialogs.count; i++) {
          QBChatDialog *dialog = self.dialogs[i];
      
          QBChatRoom *room = [dialog chatRoom];
          [self.rooms addObject:room]; // retain room object because it is autoreleased 
      
          [[ChatService instance] joinRoom:room completionBlock:^(QBChatRoom *joinedChatRoom) {
              // joined
          }];
      } 
      

      所以 myRooms 数组包含所有加入的房间

      【讨论】:

      • 感谢伊戈尔的回复,但仍然是同样的问题,它在 chatRoomDidEnter 中给出错误,在这一行:self.joinRoomCompletionBlock(room);作为 EXC_BAD_ACCESS
      • 你是如何定义 myRooms 的?
      • @property(strong,nonatomic)NSMutableArray *myRooms;
      • 但是我们使用 QBChatRoom *room 对象加入房间
      猜你喜欢
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      • 2017-10-20
      相关资源
      最近更新 更多