将 NSManagedObject 保持在 CoreData NSManagedObjectContext 块之外

Posted

技术标签:

【中文标题】将 NSManagedObject 保持在 CoreData NSManagedObjectContext 块之外【英文标题】:Keep NSManagedObject outside of CoreData NSManagedObjectContext Block 【发布时间】:2012-09-17 02:40:13 【问题描述】:

我使用辅助类来获取一个包含 NSManagedObjectContext 的块。

+ (void)openTheDocumentAndPerformBlock:(completion_handle_t)completionBlock;

现在我想将一个 NSManagedObject 保留在块之外,因为我想不断地与它交互。而且如果不能保存在ViewController中,每次需要的时候都要去查询,真的很麻烦。

1,我可以通过 segue 将 NSManagedObject 传递给另一个 VC 吗? 2、那些东西追加的时候,UIManagedDocument必须一直打开吗? 3、我可以在块外编辑NSManagedObject,并保存在块中吗?

【问题讨论】:

【参考方案1】:

如果我正确理解您的问题,您只需要在您的类(视图控制器类)中有一个 NSManagedObject 类型的实例变量,以便您可以将您在块中查询的托管对象分配给该变量.您可以在任何地方使用它。至于您的其他问题: 1.希望下面的代码sn-p可以工作: 在您的目标视图控制器类中声明一个实例变量来存储传递的对象。

@property (strong) NSManagedObject *container;

在源视图控制器的prepareForSegue:方法内获取目标vc并传递托管对象:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    UIViewController *destVC = [segue destinationViewController];
    [destVC setValue:<managed object from block> forKey:@"container"]

是的,您可以在块内部和外部使用 NSManagedObject,只要它与您使用的托管对象上下文相同。

我不知道你第二个问题的答案。

【讨论】:

是的,非常感谢...所以,我们可以将 NSManagedObject 保存在块之外。但是我们不能在块之后立即使用它(在代码方面)......我们需要等待一段时间直到块完成? 是的。如果您的逻辑需要完成是。

以上是关于将 NSManagedObject 保持在 CoreData NSManagedObjectContext 块之外的主要内容,如果未能解决你的问题,请参考以下文章

保持 CoreData NSManagedObject 新鲜

在保留 NSManagedObject 的同时保持它是最新的

NSManagedObject 时间戳更新

当一对多相关的 NSManagedObject 子类发生更改时,如何更新 NSManagedObject 子类?

将 NSManagedObject 与另一个 NSManagedContext(多线程)中的“相同”NSManagedObject 合并

如何使用 stat_cor() 函数将大写字母 P 的 p 值传递给 ggplot 对象?