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

时间:2015-02-06 14:33:15

标签: android ios quickblox

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

要做到这一点,我想在登录后启动用户所属的所有对话框(聊天室)。

使用当前的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{
}

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

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

2 个答案:

答案 0 :(得分:1)

一次可以在很多房间里

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 数组包含所有已加入的会议室

答案 1 :(得分:1)

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