gpt4 book ai didi

ios - 在不提交的情况下更改对象的属性

转载 作者:可可西里 更新时间:2023-11-01 05:52:17 25 4
gpt4 key购买 nike

我正在使用 Realm,因为它既有用又吸引人。

我正在尝试通过在字段值更改时更改用户属性来处理 View Controller 中的用户设置。

因为我的 UserRLMObject 的子类,所以我必须照常做

    [self.defaultRealm beginWriteTransaction];
user.name = textfield.text;
[self.defaultRealm commitWriteTransaction];

围绕每个用户属性集。

但这样 Realm 会写入所有更改,如果我点击“取消”,之前的值将被覆盖。

放弃更改的更好方法是什么?

编辑:

我可以通过调用 viewDidLoad 来想象一个解决方案:

[self.defaultRealm beginWriteTransaction];

didPressOk

[self.defaultRealm commitWriteTransaction];

didPressCancel

[self.defaultRealm cancelWriteTransaction];

但我觉得这不是正确的解决方案,我担心它会导致死锁...

最佳答案

最简单的方法是在类中添加一个 - (void)save; 方法。

- (void)save
{
RLMRealm *realm = [RLMRealm defaultRealm];

[realm beginWriteTransaction];
[realm addOrUpdateObject:self];
[realm commitWriteTransaction];
}

不要在每次更改属性时都开始/提交更改。 (无论如何这都是非常低效的)。相反,正常进行更改,然后在用户完成后调用 save。如果您不调用保存,更改将不会保留。

此外,您的直觉是正确的:您不应该在 viewDidLoad 上调用 [self.defaultRealm beginWriteTransaction];如果您在 View Controller 打开时碰巧在应用程序的其他任何位置打开事务,应用程序将会崩溃。

如果您已经持久化了这个特定对象,请先复制它,这样您就可以在不引发异常的情况下更改属性。

关于ios - 在不提交的情况下更改对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30055561/

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