我开始了一个新的项目,并试图实现Realm,但我无法让它正常工作。我的问题是,当我关闭我的应用程序并重新启动它时,我之前添加的所有对象都消失了,并且我从realm.objects得到的结果是空的。
class RealmManager {
static let shared = RealmManager()
let realm: Realm
init() {
realm = try! Realm()
}
func write(_ completion: ()->Void) {
do {
try realm.write() {
completion()
}
} catch {
print(error)
}
}
func add(_ object: Object) {
realm.add(object)
}
func delete(_ object: Object) {
realm.delete(object)
}
func objects<Element>(_ type: Element.Type) -> Results<Element> where Element : Object {
return realm.objects(type)
}
}我创建了这个单例,这样我就不必在代码中到处重复这个realm = try! Realm()。我在另一个项目中有一个完全相同的类,它工作得很好。
我的模型是这样的:
class PrepFile: Object {
@objc dynamic var creationDate: Date = Date()
@objc dynamic var lastModificationDate: Date = Date()
@objc dynamic var title: String = "Pas de titre"
@objc dynamic var activityKind: String = ""
@objc dynamic var seanceNumber: Int = 0
@objc dynamic var level: String = ""
@objc dynamic var duration: Int = 0
@objc dynamic var date: Date = Date()
@objc dynamic var cycle: Int = 0
@objc dynamic var mainGoal: String = ""
@objc dynamic var specificGoal: String = ""
@objc dynamic var material: String = ""
@objc dynamic var isDraft: Bool = true
convenience init(title: String? = nil, activityKind: String? = nil, seanceNumber: Int? = nil, level: String? = nil, duration: Int? = nil, date: Date? = nil, cycle: Int? = nil, mainGoal: String? = nil, specificGoal: String? = nil, material: String? = nil, phases: [Phase] = [], isDraft: Bool = true) {
self.init()
if let tt = title {
self.title = tt
}
if let ak = activityKind {
self.activityKind = ak
}
if let sn = seanceNumber {
self.seanceNumber = sn
}
if let lv = level {
self.level = lv
}
if let dt = duration {
self.duration = dt
}
if let dt = date {
self.date = dt
}
if let cl = cycle {
self.cycle = cl
}
if let mg = mainGoal {
self.mainGoal = mg
}
if let sg = specificGoal {
self.specificGoal = sg
}
if let mt = material {
self.material = mt
}
self.isDraft = isDraft
}
required init() {
}
}然后,在我的VC中,我是这样做的:
class PrepFileListViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
lazy var prepFiles: Results<PrepFile> = { RealmManager.shared.objects(PrepFile.self) }()
var completePrepFiles: [PrepFile] = []
var draftPrepFiles: [PrepFile] = []
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
RealmManager.shared.write {
for file in prepFiles {
RealmManager.shared.delete(file)
}
}
RealmManager.shared.write() {
RealmManager.shared.add(PrepFile(title: "Fiche de prep 1"))
RealmManager.shared.add(PrepFile(title: "Fiche de prep 2"))
RealmManager.shared.add(PrepFile(title: "Fiche de prep 3"))
RealmManager.shared.add(PrepFile(title: "Fiche de prep 4"))
RealmManager.shared.add(PrepFile(title: "Fiche de prep 5"))
}
}
override func viewWillAppear(_ animated: Bool) {
prepFiles = RealmManager.shared.objects(PrepFile.self)
completePrepFiles = prepFiles.filter({ !$0.isDraft })
draftPrepFiles = prepFiles.filter({ $0.isDraft })
tableView.reloadData()
}
}现在,当我运行这段代码时,它工作得很好。我的PrepFile被添加到Realm中,我可以用我的RealmManager.shared.objects(PrepFile.self)来检索它们。现在,我注释了在viewDidLoad中删除/添加文件但什么也得不到的部分。我没有从RealmManager.shared.objects(PrepFile.self)获得空对象,我得到了一个空结果,就像没有任何东西被保存在那里一样。
我做错了什么?
我正在使用Xcode12,并在iPhone 11 / 13.3模拟器上运行我的应用程序。领域版本为5.5.0。
发布于 2020-10-13 23:50:11
嗯,根据我的猜测,你要么在其他地方将realm的配置设置为"inMemoryIdentifier“,要么在应用程序的请求时没有使用fileURL设置正确的配置。配置本地领域:https://realm.io/docs/swift/latest/#realms
https://stackoverflow.com/questions/64337479
复制相似问题