2017-10-05 12 views
0

J'ai créé un domaine avec un compte administrateur et lorsque je regarde mon tableau de bord, mon domaine est présent. Sa colonne propriétaire est vide cependant? Est-ce normal? Parce que j'ai ouvert ce domaine synchronisé avec mon compte admin.Realm Object Server Swift, modification de l'autorisation par défaut d'un domaine

Ma question principale est la suivante: dans les permissions par défaut, il est dit "pas d'accès". J'ai essayé de donner à tous les utilisateurs la permission d'écrire dans ce domaine montré ci-dessous:

SyncUser.logIn(with: admin, server: serverURL) { (user, error) in 

     let permission = SyncPermissionValue(realmPath: "realm://myServerIp/swipeItApp/", username: "*", accessLevel: .write) 

     user?.applyPermission(permission, callback: { (error) in 

      if error != nil { 

       print(error?.localizedDescription) 

      } else { 

       print("success") 

      } 

     }) 

    } 

mais aucune erreur ou succès imprime. Quel est le problème dans mon code? Merci!

Répondre

3

Merci d'utiliser Realm.

La raison pour laquelle vous ne voyez pas le rappel est que vous exécutez la méthode applyPermission() directement dans le rappel logIn(). La méthode applyPermission() doit être exécutée sur un thread avec une boucle d'exécution active et le rappel logIn() s'exécute sur les threads sans boucles d'exécution gérées par une file d'attente d'arrière-plan.

Pour résoudre ce problème, utilisez DispatchQueue.main.async pour envoyer votre code de retour sur la file d'attente principale:

SyncUser.logIn(with: admin, server: serverURL) { (user, error) in 
    let permission = SyncPermissionValue(realmPath: "realm://myServerIp/swipeItApp/", username: "*", accessLevel: .write) 
    DispatchQueue.main.async { 
     user?.applyPermission(permission, callback: { (error) in 
      if error != nil { 
       print(error?.localizedDescription) 
      } else { 
       print("success") 
      } 
     }) 
    } 
} 

Nous considérons la nécessité d'utiliser DispatchQueue.main.async pour ce cas d'utilisation d'une erreur de conception et va changer la façon dont logIn() œuvres dans notre prochaine version Realm 3.0.0 pour exécuter le rappel sur la file d'attente principale par défaut. Donc, si vous mettez à niveau vers Realm 3.0.0 une fois qu'il est sorti, vous n'aurez plus besoin d'utiliser la solution de contournement I détaillée ci-dessus; Votre code original devrait fonctionner tel quel.