2017-05-17 5 views
1

Ich erstellte die Anwendung verwenden vorhandene Datenbank Realm 2.3.0 und swift 3.1 xcode 8.3. Aber wenn ich versuche, auf die Realm-Datenbank zuzugreifen. es gibt einen Fehler.Bestehende Realm-Datenbank nicht in Swift 3.1 arbeiten xcode 8

Datenbank kann nicht zugreifen: Fehler Domain = io.realm-Code = 2 „nicht imstande, ein Reich auf Weg zu öffnen‚/ Users/dodipurnomo/Library/Developer/CoreSimulator/Geräte/858C796B-CBA8-424B-9A97- 0893304B758B/data/Container/Daten/Anwendung/A2D910EE-AAC5-4836-9FE7-97F744E802E5/Dokumente/Conversio.realm ': Nicht unterstützte Realm-Dateiformatversion. " UserInfo = {NSFilePath =/Benutzer/dodipurnomo/Bibliothek/Entwickler/CoreSimulator/Devices/858C796B-CBA8-424B-9A97-0893304B758B/Daten/Container/Daten/Anwendung/A2D910EE-AAC5-4836-9FE7-97F744E802E5/Dokumente/Conversio. Realm,

Oben ist eine Fehlermeldung, wenn ich versuche, die Datenbank auszuführen. Wie für die Klasse ist die Datenbank Reich hendleing wie folgt:

import RealmSwift 
import UIKit 

class DBManager{ 
//MARK: - Singleton shared intance 

static let sharedIntance = DBManager() 
//MARK: - overide init function in realm 

static var realm: Realm { 
    get { 
     do { 
      let realm = try Realm() 
      return realm 
     } 
     catch { 
      print("Could not access database: ", error) 
     } 
     return self.realm 
    } 
} 

public static func write(realm: Realm, writeClosure:() ->()) { 
    do { 
     try realm.write { 
      writeClosure() 
     } 
    } catch { 
     print("Could not write to database: ", error) 
    } 
} 

public static func query(realm: Realm,queryClosure:() ->()){ 

} 


func save(entityList: [Object], shouldUpdate update: Bool = false) { 
    DBManager.realm.beginWrite() 
    for entity in entityList { 
     if let key = type(of: entity).primaryKey(), let value = entity[key] , update { 
      if let existingObject = DBManager.realm.object(ofType: type(of: entity), forPrimaryKey: value as AnyObject) { 
       let relationships = existingObject.objectSchema.properties.filter { 
        $0.type == .array 
       } 
       for relationship in relationships { 
        if let newObjectRelationship = entity[relationship.name] as? ListBase , newObjectRelationship.count == 0 { 
         entity[relationship.name] = existingObject[relationship.name] 
        } 
       } 
      } 
     } 
     DBManager.realm.add(entity, update: update) 
    } 

    do { 
     try DBManager.realm.commitWrite() 
    } catch let writeError { 
     debugPrint("Unable to commit write: \(writeError)") 
    } 

    DBManager.realm.refresh() 
} 
} 

Und ich gesetzt in AppDelegate das Reich wie folgt:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    // Override point for customization after application launch. 
    let desPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! 
    let fullDesPath = URL(fileURLWithPath: desPath).appendingPathComponent("Conversio.realm") 


    var config = Realm.Configuration() 
    config.deleteRealmIfMigrationNeeded = true 
    config.fileURL = fullDesPath 
    Realm.Configuration.defaultConfiguration = config 
    chekDB() 
    return true 
} 


//chek database 
func chekDB() { 
    let bundleDB = Bundle.main.path(forResource: "Conversio", ofType: "realm") 
    let desPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! 
    let fileManager = FileManager.default 
    let fullDesPath = URL(fileURLWithPath: desPath).appendingPathComponent("Conversio.realm") 
    let fullDestPathString = String(describing: fullDesPath) 
    if fileManager.fileExists(atPath: fullDesPath.path){ 
     print("Database file is exis !") 
     print(fileManager.fileExists(atPath: bundleDB!)) 
    }else{ 
     do{ 
      try fileManager.copyItem(atPath: bundleDB!, toPath: fullDesPath.path) 
     }catch{ 
      print("error encured while copying file to directori \(fullDestPathString)") 
     } 
    } 
} 
+0

Der wichtige Teil der Fehlermeldung ist "Nicht unterstützte Realm-Dateiformatversion" –

Antwort

0

ich im Bereich Browser geöffnet, um die Datenbank und ich habe die Datenbank aktualisiert. Und ich habe jetzt ein neues Problem beim Öffnen der Datenbank. Warum wird die Datenbank leer?

+0

In welcher Version von Realm Browser haben Sie die Realm-Datei mit geöffnet? – Dmitry

+0

Realm 2.7.0: D .. – user7845351

+0

haben Sie 2.3.0 Realm Browser. – user7845351

1

Die Fehlermeldung, die Sie erhalten, bedeutet, dass die Realm-Datei mit einer neueren Version von Realm erstellt wurde, aktualisieren Sie Realm also auf die neueste Version.

Denken Sie auch daran, wenn Sie Realm mit Realm Browser öffnen, der eine neuere Realm-Version verwendet, werden Sie aufgefordert, das Dateiformat zu konvertieren. Wenn Sie das tun, können Sie diesen Realm mit einer älteren Version von Realm-Kakao öffnen.