2017-03-21 3 views
0

Je viens de créer une application Todo simple en utilisant la base de données Realm. J'ai utilisé Realm Browser 2.1.6 téléchargé de Mac Apple Store pour conserver les données. En utilisant Realm Browser, je peux éditer normalement des valeurs d'enregistrements existants et les afficher sur l'écran Todo App, cependant les nouveaux enregistrements ajoutés par (Command +) ne peuvent pas s'afficher sur l'écran du simulateur. J'utilise Xcode 8.2 et swift 3. Ai-je manqué quelque chose ou est-ce un bug?Impossible d'ajouter un nouvel enregistrement à la base de données de domaine à l'aide de Realm Browser 2.1.6 téléchargé à partir de Mac Apple Store

Merci pour votre travail.

Mes meilleures salutations,

Kamogawa

Répondre

0

Si ces nouveaux objets que vous avez ajoutés au navigateur de Realm ont certainement persisté (c.-à, vous pouvez fermer le fichier Royaume et ouvrir de nouveau, et ils » re toujours là), alors il semble que vous ayez besoin d'ajouter un bloc de notification dans votre application pour détecter quand le navigateur de domaine a changé les données et pour déclencher une mise à jour de l'interface utilisateur.

Si vous affichez ces enregistrements en tant que table ou vue de collection, vous pouvez utiliser Realm's collection change notifications pour détecter l'ajout d'un nouvel objet.

class ViewController: UITableViewController { 
    var notificationToken: NotificationToken? = nil 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    let realm = try! Realm() 
    let results = realm.objects(Person.self).filter("age > 5") 

    // Observe Results Notifications 
    notificationToken = results.addNotificationBlock { [weak self] (changes: RealmCollectionChange) in 
     guard let tableView = self?.tableView else { return } 
     switch changes { 
     case .initial: 
     // Results are now populated and can be accessed without blocking the UI 
     tableView.reloadData() 
     break 
     case .update(_, let deletions, let insertions, let modifications): 
     // Query results have changed, so apply them to the UITableView 
     tableView.beginUpdates() 
     tableView.insertRows(at: insertions.map({ IndexPath(row: $0, section: 0) }), 
          with: .automatic) 
     tableView.deleteRows(at: deletions.map({ IndexPath(row: $0, section: 0)}), 
          with: .automatic) 
     tableView.reloadRows(at: modifications.map({ IndexPath(row: $0, section: 0) }), 
          with: .automatic) 
     tableView.endUpdates() 
     break 
     case .error(let error): 
     // An error occurred while opening the Realm file on the background worker thread 
     fatalError("\(error)") 
     break 
     } 
    } 
    } 

    deinit { 
    notificationToken?.stop() 
    } 
} 

Sinon, vous devrez peut-être utiliser un autre type de notifications de domaine.

Dans tous les cas, même si votre interface utilisateur de votre application ne se met pas à jour, les objets de domaine sont en direct et se mettront automatiquement à jour automatiquement lorsque leurs valeurs changent. Vous devriez être en mesure de définir des points d'arrêt dans votre application et d'examiner les objets directement pour confirmer que vos données se présentent. Bonne chance!

+0

Salut Mr.TiM, Merci beaucoup pour votre commentaire. C'est tellement bon pour moi d'apprendre la méthode de débogage de votre part. Après la réinstallation, j'ai résolu le problème. Le navigateur de domaine est tellement cool! – Kamogawa