我要实现的是使用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。只是不要释放障碍。