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)")
}
}
}
Der wichtige Teil der Fehlermeldung ist "Nicht unterstützte Realm-Dateiformatversion" –