QuickBlox - Dialog必须在Objective c中的内存缓存中

时间:2017-05-05 10:45:50

标签: ios objective-c swift xcode quickblox

我已经创建了一个聊天应用程序。我使用QuickBlox互相聊天。

我已经注册了两个用户并互相聊天,这将是完美的。 但是当用户注销并再次登录时,它将崩溃。

错误 - 对话必须在内存缓存中!

EX: B 用户使用他们的设备登录并在他们退出并再次登录时以及他们发送邮件应用程序崩溃时相互聊天。

LOGIN

NSString *deviceUdid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
                [QBRequest unregisterSubscriptionForUniqueDeviceIdentifier:deviceUdid successBlock:^(QBResponse *response) {
                    // Unsubscribed successfully
                       NSLog(@"Unsubscribed successfully");

                } errorBlock:^(QBError *error) {
                    // Handle error
                    NSLog(@"Unsubscribed ERROR");
                }];

聊天的

与ChatViewController聊天。

LOGOUT

1)未订阅的设备令牌

[ServicesManager.instance logoutWithCompletion:^{

           NSLog(@"logoutWithCompletion");

    }];

2)ServicesManager Logout

[QBRequest logOutWithSuccessBlock:^(QBResponse *response) {
           // Successful logout
              NSLog(@"Successful logout");

     } errorBlock:^(QBResponse *response) {
              // Handle error
               NSLog(@"Logout ERROR %@",response);
   }];

3)logOut With Success Block

- (void)sendMessage:(QBChatMessage *)message
         toDialogID:(NSString *)dialogID
      saveToHistory:(BOOL)saveToHistory
      saveToStorage:(BOOL)saveToStorage
         completion:(QBChatCompletionBlock)completion
{
    NSCParameterAssert(dialogID);
    QBChatDialog *dialog = [self.dialogsMemoryStorage chatDialogWithID:dialogID];
    NSAssert(dialog != nil, @"Dialog have to be in memory cache!");

    [self sendMessage:message toDialog:dialog saveToHistory:saveToHistory saveToStorage:saveToStorage completion:completion];
}

退出后再发送消息并再次登录时崩溃

QMChatService.m

margin:0

1 个答案:

答案 0 :(得分:1)

答案很晚,但是也许有人会觉得有用。
为了使对话在内存中,必须使用正确的方法加载对话(某些方法不执行此操作)。
这是我的操作方法(但是,对不起,很抱歉)

private func sendMessage(message: QBChatMessage) {
    if ServicesManager.instance().chatService.dialogsMemoryStorage.chatDialog(withID: self.dialog.id!) != nil {
        self.send(message: message)
    } else {
        loadAndSaveToMemoryDialog(message)
    }
}

private func send(message: QBChatMessage) {
    ServicesManager.instance().chatService.send(message, toDialogID: self.dialog.id!, saveToHistory: true, saveToStorage: true) { (error in
        if error != nil {
            QMMessageNotificationManager.showNotification(withTitle: "SA_STR_ERROR", subtitle: error?.localizedDescription, type: .error, handler: nil)
        }
    }
}

private func loadAndSaveToMemoryDialog(_ message: QBChatMessage) {
    ServicesManager.instance().chatService.loadDialog(withID: self.dialog.id!) {
        [weak self] _ in
        guard let self = self else { return }
        self.sendMessage(message: message)
    }
}