gpt4 book ai didi

swift - 使用 Realm Swift 预加载数据库

转载 作者:行者123 更新时间:2023-11-28 12:38:22 25 4
gpt4 key购买 nike

我在让 PreLoaded 数据正常工作时遇到了一些麻烦。首先,这里是代码:

 if  firstRun  {
userDefaults.set(1, forKey: "dayCount")
userDefaults.set(dateFormatter.string(from: date), forKey: "date")

let newPath = defaultPath.deletingLastPathComponent()
let v0Path = bundleURL("default")
do {
//try FileManager.default.removeItem(at: defaultPath)
try FileManager.default.copyItem(at: v0Path!, to:defaultPath)
} catch {
print(error)
}
} ...

v0路径:

file:///Users/dimasalbuquerque/Library/Developer/CoreSimulator/Devices/7FE635BA-AA7A-4241-AF3B-88AD60693AE7/data/Containers/Bundle/Application/B6739B92-B7D8-4DD8-9DA8-CD9BBD84B109/Example.app/default.realm

默认路径:

file:///Users/dimasalbuquerque/Library/Developer/CoreSimulator/Devices/7FE635BA-AA7A-4241-AF3B-88AD60693AE7/data/Containers/Data/Application/A86C4337-9006-497C-A688-AD781F49EF04/Documents/default.realm

我遵循了这个指南:https://github.com/realm/realm-cocoa/blob/master/examples/ios/swift-2.2/Migration/AppDelegate.swift

问题是当程序第一次运行时,它正确地执行了代码,但是当我尝试访问 Realm 数据库时,它说它是空的。虽然当我第二次打开该应用程序时,它可以运行,但数据就在那里。我试图解决这个问题已经超过 1 周了,我已经搜索了所有网络但没有成功。

这里是第一次调用 Realm 的地方:

class HomeViewController: UIViewController {

@IBOutlet weak var message: UILabel!
@IBOutlet weak var backward: UIButton!
@IBOutlet weak var forward: UIButton!
@IBOutlet weak var background: UIImageView!
@IBOutlet weak var timeBtn: UIButton!
@IBOutlet weak var favoriteBtn: UIButton!
@IBOutlet weak var googleAd: GADBannerView!

let userDefaults = UserDefaults.standard
let realm = try! Realm()
var currentDate = 1
var time = 0 {
didSet {
if time != oldValue {
randomBackground(time)
}
}
}
var dailyMessage: DailyMessagesRealm?
var currentMsg: Message?

override func viewDidLoad() {
super.viewDidLoad()
let first = userDefaults.bool(forKey: "notFirstRun")
if !first {
userDefaults.set(true, forKey: "notFirstRun")
reNew()
}

let day = userDefaults.integer(forKey: "dayCount")
currentDate = day
let empty = realm.objects(DailyMessagesRealm.self).isEmpty
let dailyMessage = realm.objects(DailyMessagesRealm.self).filter("date == '\(day)'").first
//*********Error occurs here***********
self.dailyMessage = dailyMessage!
self.currentMsg = dailyMessage?.morningMessage
self.currentMsg = dailyMessage?.morningMessage
changeMessage((dailyMessage?.morningMessage?.message)!)
initAds()
changeBackground("morning1")
checkFavorite()
} ...

最佳答案

从它的声音来看,您必须在此处执行复制操作之前在某处调用 Realm()

default.realm 仅在您第一次调用 Realm() 时打开。但是,一旦它打开,它就会在内存中存储关于该文件的缓存信息,因此如果您在事后替换它,您最终会遇到不可预知的行为。

如果你绝对需要用 Realm() 做一些操作,你可以将它包含在一个 @autoreleasepool { } block 中以确保它的缓存条目在内存中在您执行文件复制之前可以预见地刷新。

除此之外,我建议检查您的代码以确保您在接触任何指向它的 Realm() 实例之前执行此文件复制。

关于swift - 使用 Realm Swift 预加载数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40232193/

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