现有的领域数据库不能在 swift 3.1 xcode 8 中工作

Posted

技术标签:

【中文标题】现有的领域数据库不能在 swift 3.1 xcode 8 中工作【英文标题】:Existing Realm Database notworking in swift 3.1 xcode 8 【发布时间】:2017-05-17 17:26:57 【问题描述】:

我使用现有的数据库领域 2.3.0 和 swift 3.1 xcode 8.3 创建了应用程序。 但是当我尝试访问领域数据库时。有错误。

无法访问数据库:错误 Domain=io.realm Code=2 “无法在路径 '/Users/dodipurnomo/Library/Developer/CoreSimulator/Devices/858C796B-CBA8-424B-9A97-0893304B758B/data 打开领域/Containers/Data/Application/A2D910EE-AAC5-4836-9FE7-97F744E802E5/Documents/Conversio.realm':不受支持的领域文件格式版本。” UserInfo=NSFilePath=/Users/dodipurnomo/Library/Developer/CoreSimulator/Devices/858C796B-CBA8-424B-9A97-0893304B758B/data/Containers/Data/Application/A2D910EE-AAC5-4836-9FE7-97F744E802E5/Documents/Conversio。领域,

上面是我尝试执行数据库时的错误消息。 至于处理数据库领域的类如下:

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()
 

我在 appdelegate 中设置 Realm 如下:

    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)")
        
    

【问题讨论】:

错误信息的重要部分是“Unsupported Realm file format version” 【参考方案1】:

您收到的错误消息表示该领域文件是使用较新版本的 Realm 创建的,因此请将 Realm 更新到最新版本。

还请记住,如果您使用 Realm Browser 打开领域,该浏览器使用较新版本的领域,它会要求您转换文件格式。如果你这样做,你可以使用旧版本的 realm-cocoa 打开这个领域。

【讨论】:

以上是关于现有的领域数据库不能在 swift 3.1 xcode 8 中工作的主要内容,如果未能解决你的问题,请参考以下文章

IBM Worklight - 我们可以导入现有的 Xcode 项目吗?

将文本从 UITextView 保存到领域(Swift 5)时出现问题

Swift - 如何检查现有的 Core Data Store iOS

将核心数据添加到现有的选项卡式应用程序(ios swift、Xcode6)

将现有的objective-c静态库转换为swift

如何将 .net core Web API 项目添加到现有的 .NET core (3.1) Web Application 项目中?