gpt4 book ai didi

ios - 如何创建预捆绑 Realm 文件并将数据上传到其中?

转载 作者:可可西里 更新时间:2023-11-01 00:43:24 25 4
gpt4 key购买 nike

我是 Realm 的新手,我想在我的应用程序中发布预捆绑的 Realm 文件,但是 realm documentation我不清楚如何实际创建 .realm 文件并将所需的预捆绑数据上传到它。我无法通过 SO、Google 或 Youtube 找到任何解决方案。分步说明会非常有帮助。

最佳答案

我们仍在寻找官方方法,使生成预填充的 Realm 变得更加容易。这绝对是 Realm 浏览器所需的功能,但由于 Realm 文件在更改架构时需要迁移的方式,因此将其合并到 UI 中有些棘手。这绝对是我们想要改进的地方。

此刻,浏览器有 a converter in it可以像 CSV 文件一样执行最少的数据导入。

Realm 文档说,为您的应用程序需求生成预填充 Realm 的最简单方法是构建一个单独的 macOS 应用程序,其唯一作用是生成 Realm 文件,预填充数据,然后公开生成的 Realm 文件,以便您可以将其复制到您的应用中。

执行此操作就像任何正常的 Realm 交互一样(try!Realm() 是导致文件实际最初创建的原因),除了您手动与磁盘上的 Realm 文件交互完成后。

我正在为一个 iOS session 开发一个应用程序,事件的日程安排数据将存储在应用程序发布时预先捆绑的 Realm 中。

因为我认为创建一个额外的 macOS 应用程序对于 iOS 应用程序来说太过分了,所以我改为使用 iOS 单元测试,它会在每次执行时从头开始生成预捆绑的 Realm。

class Tests: XCTestCase {
func testGenerateNewDefaultRealm() {
let sources = [conferences, sponsors, conferenceDays] as [Any]
XCTAssert(generateDefaultRealm(named: "MyConferenceRealm.realm", sources: sources))
}
}

extension Tests {
public func generateDefaultRealm(named name: String, sources: [Any]) -> Bool {
// Create and configure the Realm file we'll be writing to
let realm = generateRealm(named: name)

// Open a Realm write transaction
realm.beginWrite()

// Loop through each source and add it to Realm
for source in sources {
if let objectArray = source as? [Object] {
for object in objectArray {
realm.add(object)
}
}
else if let objectDictionary = source as? [String : Object] {
for (_, object) in objectDictionary {
realm.add(object)
}
}
}

// Commit the write transaction
do {
try realm.commitWrite()
}
catch let error {
print(error.localizedDescription)
return false
}

// Print the file location of the generated Realm
print("=====================================================================")
print(" ")
print("Successfully generated at")
print(realm.configuration.fileURL!.path)
print(" ")
print("=====================================================================")

return true
}

public func generateRealm(named name: String) -> Realm {
let exportPath = NSTemporaryDirectory()
let realmPath = exportPath.appending(name)

// Delete previous Realm file
if FileManager.default.fileExists(atPath: realmPath) {
try! FileManager.default.removeItem(atPath: realmPath)
}

// Create new Realm file at path
let objectTypes: [Object.Type] = [Conference.self, ConferenceDay.self, SessionBlock.self, Event.self, Presentation.self,
Session.self, Location.self, Speaker.self, Sponsor.self, Venue.self]
let configuration = Realm.Configuration(fileURL: URL(string: realmPath), objectTypes: objectTypes)
let realm = try! Realm(configuration: configuration)
return realm
}
}

运行这个单元测试会在Mac的NSTemporaryDirectory()目录下生成一个新的Realm文件,然后传入一组ArrayDictionary 每次运行测试时创建的非持久化 Realm Object 实例的对象。最终 Realm 的位置随后会打印在控制台中,这样我就可以抓取它并将其移动到应用程序包中。

关于ios - 如何创建预捆绑 Realm 文件并将数据上传到其中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42234115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com