启动所有对话框(聊天室)以自动下载 quickblox 中的附件

start all dialogs (chat room) to autodownload attachments in quickblox

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

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

当前 api 用户可以看到对话框(聊天室)列表并且一次只能进入一个房间。 因此,假设登录用户有 2 个聊天室(ChatRoom A,ChatRoom B),那么当他输入 'ChatRoom A' 时,他只能收到 messages/attachments for 'ChatRoom A' 作为 chatDidReceiveMessageNotification 中的通知/ chatRoomDidReceiveMessageNotification。

因此,当用户收到 'ChatRoom B' 的 message/attachment 时,他将无法访问,直到他输入 '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];
        ..
        ..
     }
}

出现错误:EXC_BAD_ACCESS 遵循 ChatService.m

的方法
- (void)chatRoomDidEnter:(QBChatRoom *)room{
}

但是当我尝试只加入一个 ChatRoom 时,它没有给我任何错误并且工作得很好。 (只需在我提到的 startallrooms 方法中检查用这个 -> for (int i=0; i<=0; i++) 替换 for loop以上)

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

一个人可以同时进入多个房间

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 数组包含所有加入的房间

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