Я пытаюсь удалить объект диалога в QMServicesManager, поэтому, когда я хочу, чтобы удалить диалог я делаю нижеНе удается удалить диалог из списка диалогов С помощью QMServicesManager?
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [ServicesManager.instance.chatService.dialogsMemoryStorage dialogsSortByUpdatedAtWithAscending:NO].count;
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
QBChatDialog *dialog = [self.modelArray objectAtIndex:indexPath.row];
if (dialog.type == QBChatDialogTypePrivate) {
[QBRequest deleteDialogsWithIDs:[NSSet setWithObject:dialog.ID] forAllUsers:NO
successBlock:^(QBResponse *response, NSArray *deletedObjectsIDs, NSArray *notFoundObjectsIDs, NSArray *wrongPermissionsObjectsIDs) {
NSLog(@"FJFFJFJ");
// [ServicesManager.instance.chatService.messagesMemoryStorage deleteMessagesWithDialogID:dialog.ID];
[ServicesManager.instance.chatService.dialogsMemoryStorage deleteChatDialogWithID:dialog.ID];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];
} errorBlock:^(QBResponse *response) {
NSLog(@"GFGFGFGFG");
}];
}
}
Так что всякий раз, когда я говорю удалить я звоню deleteDialogsWitIDs апи. Так что я получаю успешный ответ. Если я получаю успешный ответ, то только я удаляю диалог из списка диалогов таблицы. Как написано выше.
В этом случае проблема заключается в том, когда я удаляю диалог из ServiceManager, который он удаляет в диалоговом окнеMemoryStorage, поэтому счет уменьшается (пример начального счета равен 10 после удаления, он показывает счет как 9, а его стоп-таблица полностью просматривает успех).
Но когда я выхожу из приложения, а затем повторно запускаю приложение, он не удаляет удаленный диалог внутри памяти (т. Е. Он показывает фактический счет как 10, но не как 9). Поэтому ожидаемое поведение: оно должно давать новый счет (9), но не старый счет (10).
Что я понял, он временно удаляется для сеанса, но не удаляется в БД, я думаю. Или я делаю что-то неправильно? Как достичь этого?
ОБНОВЛЕНО Вопрос: После некоторых проб и ошибок, я получил решение, я не делаю все эти вещи внутри comitEditingStyle :, я просто позвонив deleteDialogWithID: он обрабатывает все. Код модифицируется этот
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
QBChatDialog *dialog = [self.modelArray objectAtIndex:indexPath.row];
if (dialog.type == QBChatDialogTypePrivate) {
[ServicesManager.instance.chatService deleteDialogWithID:dialog.ID completion:nil];
}
}
Но я получил новую проблему:
Я вошел в систему как User1 и я создал чат с Пользователю2 и User3 отдельно (2 различных частных чатов), а затем я побеседовал также. Затем я удалил диалог с User2. Теперь у меня есть только диалог User3 в моем списке диалогов.
Но если я хочу создать NewDialog с User2, то он показывает мое старое последнее сообщение в моем недавно созданном диалоге с user2. Но я хочу, чтобы он создал новый диалог с пустым последним сообщением? (Новый диалог с пользователем 2) Надеюсь, я понятен. Как это сделать?
Вопрос Обновленный С новым Требование:
Теперь если я хочу удалить групповой чат, как я должен справиться с этим? Если я использую тот же метод внутри него, мы передаем для ALLUsers как «НЕТ», который является жестко закодированным. написано в QMChatServices.m
- (void)deleteDialogWithID:(NSString *)dialogId completion:(void (^)(QBResponse *))completion {
NSParameterAssert(dialogId);
__weak __typeof(self)weakSelf = self;
[QBRequest deleteDialogsWithIDs:[NSSet setWithObject:dialogId] forAllUsers:NO successBlock:^(QBResponse *response, NSArray *deletedObjectsIDs, NSArray *notFoundObjectsIDs, NSArray *wrongPermissionsObjectsIDs) {
//
[weakSelf.dialogsMemoryStorage deleteChatDialogWithID:dialogId];
[weakSelf.messagesMemoryStorage deleteMessagesWithDialogID:dialogId];
if ([weakSelf.multicastDelegate respondsToSelector:@selector(chatService:didDeleteChatDialogWithIDFromMemoryStorage:)]) {
[weakSelf.multicastDelegate chatService:weakSelf didDeleteChatDialogWithIDFromMemoryStorage:dialogId];
}
[weakSelf.loadedAllMessages removeObjectsForKeys:deletedObjectsIDs];
if (completion) {
completion(response);
}
} errorBlock:^(QBResponse *response) {
//
if (response.status == QBResponseStatusCodeNotFound || response.status == 403) {
[weakSelf.dialogsMemoryStorage deleteChatDialogWithID:dialogId];
if ([weakSelf.multicastDelegate respondsToSelector:@selector(chatService:didDeleteChatDialogWithIDFromMemoryStorage:)]) {
[weakSelf.multicastDelegate chatService:weakSelf didDeleteChatDialogWithIDFromMemoryStorage:dialogId];
}
}
else {
[weakSelf.serviceManager handleErrorResponse:response];
}
if (completion) {
completion(response);
}
}];
}
Так вот мои сомнения ..
Вопрос 1: Что делать, если мы хотим, чтобы удалить диалог для всех пользователей. Вопрос 2: Предположим, что есть 3 пользователя. User1, User2 и User3. Теперь User1 создал группу с User2 и User3.
Так как этот метод полезен для всех трех пользователей. Я имею в виду, что произойдет, если User1 использует
[ServicesManager.instance.chatService deleteDialogWithID:dialog.ID completion:nil];
и что произойдет, если User2 и User3 используют тот же метод.
Погода работает как выход из диалогового окна или удаление диалогового окна.Я немного смущен, как этот метод работает для разных пользователей в случае группового и общедоступного чата.
Вопрос 3: Есть ли другой способ выхода из группового чата? Надеюсь, это ясно!
Да теперь я "м делает это только я обновил свой вопрос. Пожалуйста, проверьте его, и у меня есть еще один вопрос: –
Теперь с вашим ответом я подтвердил, что делаю правильно, но у меня есть еще одна проблема. Если я хочу создать новое диалоговое окно с тем же пользователем после удаления диалога. Показывает мне последнее сообщение во вновь созданном диалоговом окне. Как справиться с этим? –
@ Wills-In Что касается лет Ур второй вопрос, это проблема на стороне сервера. Мы получаем последнее сообщение с сервера. Мы исправим эту проблему в новейших обновлениях. Пожалуйста, следуйте [этой ссылке] (https://quickblox.com/blog/) для получения обновлений. –