1

我最近一直在使用 MagicalRecord - 天哪,它让我的 Core Data 生活变得更加轻松,因此完全归功于质量库的作者!

无论如何,场景是我有 3 个控制器的导航控制器堆栈,这里从下到上称为 ABC:

  • 视图控制器 A 是一个表单,我想在其中填写有关实体的详细信息(即其属性)。
  • 视图控制器 B 显示来自实体的计算结果(例如,通过实例函数)。
  • 为了简单起见,视图控制器 C 只是一个确认 & 是我想保存实体的地方。

MagicalRecord 中是否有一种方法可以[MyEntity createEntity]在视图控制器 A 中调用其属性集,通过 B 将其传递给 C 并将其保存在 C 中?如果用户决定从 B 或 C 返回 A,这还包括根本不保存它的可能性。

我完全明白我很可能在使用 Core Data 时遇到了错误,这可能是不可能的。作为一种解决方法,我已经知道我可以创建一个类方法,在给定相关参数的情况下执行相同的计算并将所有参数通过堆栈从 A 传递到 C。

编辑:为了清楚起见,我想调用[[NSManagedObjectContext defaultContext] save]View Controller C。

4

2 回答 2

1

是的,当然..只是不保存managedContext。

VC 无论如何都应该在主线程上运行.. 所以所有人都可以使用

[NSManagedObjectContext defaultContext]

或者

使用控制器上的属性在三个类之间传递 MOC。

@property NSManagedObjectContext *context;
于 2012-11-29T22:48:17.440 回答
1

After some testing, I knew @Daij-Djan had the right idea in that I don't call [[NSManagedObjectContext defaultContext] save] if I don't want to save my entity. As a result I leave that call until View Controller C to do the saving.

However, my testing showed I need to do a little more to avoid saving any unwanted entities. I've noticed if I go to A from B via the back button, I want to discard the entity there. In my use-case, it doesn't matter if I just create another new entity going from A to B, and I never pass back through View Controller B if I have successfully saved the entity.

So basically I need to delete the unsaved entity if the back button is pressed on View Controller B. This answer helps me massively there, resulting in this code in View Controller B:

-(void) viewWillDisappear:(BOOL)animated {
    if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound) {
        // self.entity is the instance of my entity

        [self.entity deleteEntity];
        self.entity = nil;
    }
    [super viewWillDisappear:animated];
}
于 2012-11-30T12:50:51.367 回答