Невозможно удалить диалог из списка диалогов. Используете 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");
                       }];
    }
}

Так что всякий раз, когда я говорю удалить, я вызываю api deleteDialogsWitIDs. Так что я получаю ответ успеха. Если я получаю ответ об успешном выполнении, то только я удаляю диалог из списка диалогов моего представления таблицы. Как написано выше.

Здесь проблема заключается в том, что когда я удаляю диалоговое окно из ServicesManager, оно удаляется в dialogsMemoryStorage, так что счет уменьшается (например, начальный счет равен 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];   

    }
}

Но у меня появилась новая проблема:

Я вошел в систему как Пользователь1 и создал чат с Пользователем2 и Пользователем3 по отдельности (2 разных приватных чата), а затем я тоже поболтал. Затем я удалил диалог с User2 Теперь у меня есть диалог User3 только в моем списке диалогов.

Но если я хочу создать NewDialog With User2, то он показывает мое старое последнее сообщение в моем недавно созданном диалоге с user2. Но что я хочу, это должно создать новый диалог с пустым последним сообщением? (Новый диалог с пользователем 2) Надеюсь, что все понятно. Как это сделать?

Вопрос обновлен с новым требованием:

Теперь, если я хочу удалить групповой чат, как я должен справиться с этим? Если я использую тот же метод внутри него, мы передаем forAllUsers как "NO", который жестко запрограммирован. написано внутри 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 пользователя. Пользователь1, Пользователь2 и Пользователь3. Теперь User1 создал группу с User2 и User3.

Так как этот метод полезен для всех трех разных пользователей. Я имею в виду, что произойдет, если User1 использует

[ServicesManager.instance.chatService deleteDialogWithID:dialog.ID completion:nil];

и что происходит, если User2 и User3 используют один и тот же метод.

Погода это работает как выход из диалога или удаление диалога. Меня немного смущает, как этот метод работает для разных пользователей в случае группового и публичного чата.

Вопрос 3: Есть ли другой способ выйти из группового чата? Надеюсь понятно!!

1 ответ

Решение

Почему вы не используете возможности QMServices?)

Вы можете просто удалить диалог с помощью следующего метода:

 // Deleting dialog from Quickblox and cache.
    [ServicesManager.instance.chatService deleteDialogWithID:dialogID
                                                  completion:^(QBResponse *response) {
                                                        if (response.success) {
                                                            __typeof(self) strongSelf = weakSelf;
                                                            [strongSelf.tableView reloadData];

                                                        } else {

                                                            NSLog(@"can not delete dialog: %@", response.error);
                                                        }
                                                    }];
Другие вопросы по тегам