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

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

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

因此,当用户收到“聊天室B”的消息/附件时,他将无法访问,直到他输入“聊天室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{
}

但是,当我尝试仅加入一个ChatRoom时,它不会给我任何错误,并且工作正常。
(只需在我上面提到的 startallrooms 方法中,用此-> for(int i = 0; i 的)

那么,即使我解决了这个问题,我在哪里出问题了,从内存角度来看,启动所有房间(如果用户有成千上万个房间)是否可行?实现相同的功能后,我也将在Android上执行此操作。

最佳答案

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

10-07 22:49