2017-09-21 3 views
0

Bonjour mes amis, j'ai créé une application avec QuickBlox. Je dois créer un 10 QBChatDialogTypePublicGroup à partir du panneau d'administration. c'est statique. Je veux créer un groupe public statique à partir du panneau d'administration quickblox et discuter avec n'importe quel utilisateur de ce groupe.QuickBlox - QBChatDialogTypePublicGroup: La boîte de dialogue doit être en mémoire cache

Je reçois tout ce groupe dans viewController et l'affiche. L'utilisateur peut alors choisir n'importe quel groupe pour discuter en public. J'utilise le framework quickblox pour discuter avec l'utilisateur. je suis fait QBChatDialogTypePrivate un à un tricher utilisateur.

Login:

- (void)loginWithQuickBlox{ 

    NSString *emaiAddress = [[NSUserDefaults standardUserDefaults] objectForKey:@"UserLogin"]; 
    NSString *password = [[NSUserDefaults standardUserDefaults] objectForKey:@"UserPassword"]; 

    [QBRequest logInWithUserLogin:emaiAddress password:password successBlock:^(QBResponse *response, QBUUser *user) 
    { 
     [[NSUserDefaults standardUserDefaults]setObject:[NSString stringWithFormat:@"%ld",(unsigned long)user.ID] forKey:@"USerLoginID"]; 
     [self loginWithQuickBloxChat:user]; 

    } errorBlock:^(QBResponse *response) 
    { 
     // error handling 
     NSLog(@"errorsssss : %@", response.error); 
    }]; 
} 

Connectez-vous avec QuickBloxChat

- (void)loginWithQuickBloxChat:(QBUUser *)selectedUser { 

    QBUUser *selectedUserx = [QBUUser user]; 
    selectedUserx.login = [[NSUserDefaults standardUserDefaults] objectForKey:@"UserLogin"]; 
    selectedUserx.password = [[NSUserDefaults standardUserDefaults] objectForKey:@"UserPassword"]; 
    selectedUserx.ID = [[[NSUserDefaults standardUserDefaults] objectForKey:@"USerLoginID"] integerValue]; 

    NSLog(@"Currunt User : %@", [QBSession currentSession].currentUser); 

    [ServicesManager.instance logInWithUser:selectedUserx completion:^(BOOL success, NSString *errorMessage) 
    { 
     [[QBChat instance] connectWithUser:selectedUserx completion:^(NSError * _Nullable error) { 

     }]; 

     if (success) 
     { 
      NSLog(@"Login in Quickblox : %@",selectedUser); 
      [self getPublicGroup]; 
     } 
     else 
     { 
      NSLog(@"Error in QuickBlox : %@",errorMessage); 
     } 
    }]; 
} 

Get Groupe Public

- (void)getPublicGroup { 

    NSMutableDictionary *extendedRequest = @{@"type" : @(1)}.mutableCopy; 
    QBResponsePage *page = [QBResponsePage responsePageWithLimit:100 skip:0]; 
    [QBRequest dialogsForPage:page extendedRequest:extendedRequest successBlock:^(QBResponse *response, NSArray *dialogObjects, NSSet *dialogsUsersIDs, QBResponsePage *page) { 
    publicGroupArray = dialogObjects.mutableCopy; 
    NSLog(@"Public Group : %@",publicGroupArray); 
    [self.groupCollectionview reloadData]; 

    } errorBlock:^(QBResponse *response) { 

    }]; 
} 

Sélectionnez un groupe quelconque et discuter avec ChatViewcontroller

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    QBChatDialog *groupChatDialog = [publicGroupArray objectAtIndex:indexPath.row]; 
    ChatViewController *chatViewController = [[ChatViewController alloc] init]; 
    chatViewController.dialog = groupChatDialog; 
    chatViewController.hidesBottomBarWhenPushed = YES; 
    [self.navigationController pushViewController:chatViewController animated:YES]; 
} 

Ce fonctionnent parfaitement toutes les procédures, mais quand j'envoie un message de ChatViewController il me donnera une erreur sur

échec Assertion en - [QMChatService sendMessage: toDialogID: saveToHistory: saveToStorage: achèvement:], Tous/Septembre/21/ChatApp/Pods/QMServices/QMChatService/QMChatService/QMChatService.m: 1338

Fin de l'application en raison d'une exception non interceptée 'NSInternalInconsistencyException', raison: 'La boîte de dialogue doit être dans cache mémoire!' *** Pile d'appel de premier jet:

Répondre

1

Vous essayez de combiner les méthodes SDK de base avec les méthodes de QMServices.

QBRequest fait partie du SDK Quickblox, QMServices sont API de haut niveau pour les fonctions de conversation en ligne comprenant:

  1. service d'authentification pour se connecter à Quickblox REST et XMPP.
  2. Boîte de réception permanente et mémoire de stockage pour les messages, les boîtes de dialogue et les utilisateurs.

Si vous souhaitez obtenir de dialogue à l'aide QMServices essayer la méthode ci-dessous:

- (void)loadDialogWithID:(NSString *)dialogID completion:(nullable void (^)(QBChatDialog * _Nullable loadedDialog))completion; 

Exemple:

[ServicesManager.instance.chatService loadDialogWithID:dialogID 
               completion:^(QBChatDialog * _Nullable loadedDialog) 
{ 

}]; 

Cette méthode se charge de dialogue à partir du serveur, joignez-vous (si le type de dialogue est groupe) et stocker en mémoire et CoreDate.

Si vous souhaitez récupérer la boîte de dialogue en utilisant la méthode de base du SDK, vous devez implémenter toutes les actions décrites par vous-même.

+0

votre réponse fonctionne parfaitement. mais j'ai une autre question que je veux documenter de QMServices Comme le noyau SDK QBRequest https://quickblox.com/developers/SimpleSample-chat_users-ios fournissez svp un lien ou n'importe quelle suggestion. – sohil

+0

Puis-je ajouter une classe ServiceManager en utilisant un module? – sohil

+0

S'il vous plaît jeter un oeil à la [github repo] (https://github.com/QuickBlox/q-municate-services-ios). –