我已经创建了一个聊天应用程序。我使用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
答案 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)
}
}