现有的领域数据库不能在 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)
如何将 .net core Web API 项目添加到现有的 .NET core (3.1) Web Application 项目中?