web-dev-qa-db-fra.com

Comment supprimer complètement la base de données Realm d'iOS?

Maintenant, j'ai l'erreur Property types for 'value' property do not match. Old type 'float', new type 'double' Comment effacer la base de données ou migrer avec succès?

7

Pour supprimer complètement le fichier Realm du disque et recommencer à zéro, il suffit d'utiliser NSFileManager pour le supprimer manuellement.

Par exemple, pour supprimer le fichier de domaine par défaut:

NSFileManager.defaultManager().removeItemAtURL(Realm.Configuration.defaultConfiguration.fileURL!)

Si vous souhaitez conserver le fichier de domaine, mais le vider complètement d'objets, vous pouvez appeler deleteAll() pour le faire:

let realm = try! Realm()
try! realm.write {
  realm.deleteAll()
}

Mise à jour: / J'ai l'impression d'avoir oublié de mentionner cela dans ma réponse initiale. Si vous choisissez de supprimer le fichier de royaume du disque, vous devez le faire avant de l'avoir ouvert sur l'un des threads de votre application. Une fois ouvert, Realm mettra en cache en interne une référence, qui ne sera pas publiée, même si le fichier est supprimé.

Si vous devez absolument ouvrir le fichier Realm pour vérifier son contenu avant de le supprimer, vous pouvez le placer dans une variable autoreleasepool.

33
TiM

Voici comment faire dans Swift 4.1:

FileManager.default.removeItem(at:Realm.Configuration.defaultConfiguration.fileURL!)  
1
Danial

En plus d'utiliser NSFileManager pour supprimer le fichier, supprimez également le fichier .lock et le dossier .management. Sinon, si vous essayez de recréer le fichier de domaine avec le même nom, une erreur apparaîtra en indiquant qu'il ne peut pas le trouver.

1
HG's

Swift 4.2:

func remove(realmURL: URL) {
        let realmURLs = [
            realmURL,
            realmURL.appendingPathExtension("lock"),
            realmURL.appendingPathExtension("note"),
            realmURL.appendingPathExtension("management"),
            ]
        for URL in realmURLs {
            try? FileManager.default.removeItem(at: URL)
        }
let url = Realm.Configuration.defaultConfiguration.fileURL!
remove(realmURL: url)
1
Elizaveta Rudenko

Alors que les autres commentaires sont exacts, vous devriez vraiment regarder: https://realm.io/docs/Swift/latest/#migrations

Cela donne une explication très claire de la migration. C’est très simple et il est bien mieux de tout supprimer si on peut l’aider.

1
Alex Trott

As-tu essayé 

   let realm = try! Realm()
   realm.deleteAllObjects() 

Vous pouvez également essayer de supprimer le royaume du périphérique en le branchant sur l'ordinateur, en accédant à Xcode puis en Périphérique, puis en recherchant le royaume actuel et en le supprimant. 

0
Amloelxer

Swift 4.2 Pour supprimer la base de données:

func remove(realmURL: URL) {
        let realmURLs = [
            realmURL,
            realmURL.appendingPathExtension("lock"),
            realmURL.appendingPathExtension("note"),
            realmURL.appendingPathExtension("management"),
            ]
        for URL in realmURLs {
            try? FileManager.default.removeItem(at: URL)
        }
let url = Realm.Configuration.defaultConfiguration.fileURL!
remove(realmURL: url)

Pour effacer la base de données:

try? realm.write {
    realm.deleteAll()
}
0
Elizaveta Rudenko