Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 取消编辑视图Realm.io数据库_Cocoa_Realm - Fatal编程技术网

Cocoa 取消编辑视图Realm.io数据库

Cocoa 取消编辑视图Realm.io数据库,cocoa,realm,Cocoa,Realm,我想为Realm.io数据库中的现有对象模型创建一个编辑视图。视图控制器具有保存更改的保存按钮和放弃更改的取消按钮 我无法在写事务之外修改RLMObject,因此,建议使用什么方法临时修改RLMObject,以便在必要时放弃更改?您可以将域对象作为内存中的对象传递到编辑视图控制器中进行编辑。像这样: RLMRealm *realm = [RLMRealm defaultRealm]; [realm beginWriteTransaction]; [StringObject createInDef

我想为Realm.io数据库中的现有对象模型创建一个编辑视图。视图控制器具有保存更改的保存按钮和放弃更改的取消按钮


我无法在写事务之外修改
RLMObject
,因此,建议使用什么方法临时修改
RLMObject
,以便在必要时放弃更改?

您可以将域对象作为内存中的对象传递到编辑视图控制器中进行编辑。像这样:

RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
[StringObject createInDefaultRealmWithObject:@[@"a"]];
[realm commitWriteTransaction];

StringObject *obj = [[StringObject alloc] initWithObject:[[StringObject allObjects] firstObject]];
XCTAssertEqualObjects(obj.stringCol, @"a");
obj.stringCol = @"b"; // not in a write transaction
XCTAssertEqualObjects(obj.stringCol, @"b");
如果用户按“保存”,则可以调用
createOrUpdateInDefaultRealmWithObject:
并传入内存中的对象,然后该对象将传入所有值并在领域中更新该对象。请注意,您的对象必须具有主键才能工作

如果用户按下“取消”,您可以丢弃内存中的对象,就像什么都没发生一样


请注意,我们打算在将来添加事务回滚功能,这将简化此模式。

我期待看到事务回滚。@jpsim这仍然是推荐的方式吗?即使事务回滚现在在这里,我仍然认为使用您的方法是正确的方法。现在启用了回滚,它们是取消短期事务的首选方法。由于写操作会阻止域中的其他写操作,因此长寿命事务从本答案中描述的方法中受益更多。请记住,写入不会阻止读取,读取也不会阻止任何其他事务。