2016-11-08 7 views
0

Neu in Realm. Ich habe ein bisschen herumgebastelt, ein paar Models gemacht, mit einigen Testdaten gespielt, jetzt habe ich meine Models aktualisiert (einige Eigenschaften hinzugefügt, einige andere entfernt, einige bereits geändert) und möchte meine Realms-Datei komplett löschen, damit ich neu mit neuen beginnen kann Testdaten basierend auf den neuen Modellen. Irgendwie kann ich die Datei nicht einfach löschen.Swift Realm - unsicher veränderbar Accessor

  1. einfach

    versuchen Sie es mit! realm.write { realm.deleteAll() }

Abstürze in realm.unsafeMutableAddressor auf der Linie let realm = try! Realm()

  1. Der Versuch, alles über den Realm Browser zu löschen, i kann keine Schaltfläche zum Löschen des gesamten Schemas gefunden werden? Ich kann nur bestimmte Objekte löschen ..

  2. Der Versuch, es zu löschen über:

    versuchen! FileManager.default.removeItem (at: realm.configuration.fileURL)

stürzt wieder in der gleichen Fehlermeldung als 1.

Was zum Teufel mache ich, um zu tun, müssen nur „Start von Grund auf neu"? Das hat mich ungefähr eine Stunde gekostet und es auf diese drei verschiedenen Arten versucht. Irgendwelche Ideen?

Danke!

EDIT: Ich weiß nicht wirklich, welchen Code zu posten, um Ihnen etwas Material zu raten. Was sollte ich für hilfreichere Informationen zu dem Problem veröffentlichen?

Antwort

1

Wenn Sie das Schema ändern und sich keine Sorgen über die Durchführung von Realm-Migrationen machen wollen, reicht es nicht, einfach alle Objekte im Realm zu löschen. Sie müssen die Realm-Datei von der Festplatte löschen und neu starten.

Wenn Sie eine Realm-Datei löschen möchten, müssen Sie dies tun, bevor Sie zum ersten Mal Realm() aufrufen, da Realm anschließend eine Kopie dieser Instanz im Speicher behält (Dies kann durch diese Instanzerstellung jedoch innerhalb eines @autoreleasepool Blocks platzieren).

Für Debugging-Zwecke ist der einfachste Weg, einen Realm zu löschen, wenn eine Migration erforderlich ist, deleteRealmIfMigrationNeeded auf true im Objekt Configuration des Realms zu setzen.

var configuration = Realm.Configuration() 
configuration.deleteRealmIfMigrationNeeded = true 
Realm.Configuration.defaultConfiguration = configuration 

let realm = try! Realm() 

Wenn Sie die Standard-Realm-Datei selbst explizit löschen, müssen Sie dies tun, indem Sie die Datei direkt URL in der Standardkonfiguration verweist. Wenn Sie eine Realm()-Instanz erstellen und dann die fileURL-Eigenschaft daraus ziehen, ist es bereits zu spät.

var configuration = Realm.Configuration() 
let defaultURL = configuration.fileURL 

try! FileManager.default.removeItem(at: defaultURL) 

let realm = try! Realm() 

Lassen Sie mich wissen, wenn Sie Klärung dieser Punkte müssen. Danke, dass du Realm ausprobiert hast! :)