2015-02-06 120 views
1

我想要实现什么是没有进入聊天室,使用QuickBlox SDK IOS版本2.0.12 autodownload附件功能,启动所有对话(聊天室),以autodownload附件中quickblox

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

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

因此,当用户收到'ChatRoom 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{ 
} 

但是,当我尝试加入只有一个聊天室,它并没有给我任何错误和工作完全正常。 (只检查与此替换for循环 - >为(INT I = 0;我< = 0;在startallrooms方法,我上述我++))

所以,我在哪里去错和甚至如果我解决了这个问题,从内存的角度来看,是否可以启动所有房间(如果用户有数千个房间)?实现后,我也会在Android上做。

回答

1

如果你看看ChatService类里面,你可能会看到成功后单次-chatRoomDidEnter ,完成块将被释放。这意味着此方法的第二次调用将导致EXC_BAD_ACCESS。只是不要释放块。

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数组包含所有加盟客房

+0

感谢您的回复伊戈尔,但仍然同样的问题,它是在chatRoomDidEnter,在这一行中发生错误:self.joinRoomCompletionBlock(room);如EXC_BAD_ACCESS – SML 2015-02-09 15:54:16

+0

您是如何定义myRooms的? – 2015-02-09 16:09:54

+0

@property(强,非原子)NSMutableArray * myRooms; – SML 2015-02-09 16:11:34