首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Realm swift:重新启动应用后清空realm

Realm swift:重新启动应用后清空realm
EN

Stack Overflow用户
提问于 2020-10-13 22:45:05
回答 1查看 218关注 0票数 0

我开始了一个新的项目,并试图实现Realm,但我无法让它正常工作。我的问题是,当我关闭我的应用程序并重新启动它时,我之前添加的所有对象都消失了,并且我从realm.objects得到的结果是空的。

代码语言:javascript
复制
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()。我在另一个项目中有一个完全相同的类,它工作得很好。

我的模型是这样的:

代码语言:javascript
复制
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中,我是这样做的:

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

发布于 2020-10-13 23:50:11

嗯,根据我的猜测,你要么在其他地方将realm的配置设置为"inMemoryIdentifier“,要么在应用程序的请求时没有使用fileURL设置正确的配置。配置本地领域:https://realm.io/docs/swift/latest/#realms

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64337479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档