2016-05-11 5 views
0

Я пытаюсь удалить объект диалога в 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: Есть ли другой способ выхода из группового чата? Надеюсь, это ясно!

ответ

3

Почему вы не используя силу 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); 
                 } 
                }]; 
+0

Да теперь я "м делает это только я обновил свой вопрос. Пожалуйста, проверьте его, и у меня есть еще один вопрос: –

+0

Теперь с вашим ответом я подтвердил, что делаю правильно, но у меня есть еще одна проблема. Если я хочу создать новое диалоговое окно с тем же пользователем после удаления диалога. Показывает мне последнее сообщение во вновь созданном диалоговом окне. Как справиться с этим? –

+0

@ Wills-In Что касается лет Ур второй вопрос, это проблема на стороне сервера. Мы получаем последнее сообщение с сервера. Мы исправим эту проблему в новейших обновлениях. Пожалуйста, следуйте [этой ссылке] (https://quickblox.com/blog/) для получения обновлений. –

Смежные вопросы