将 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 与另一个 NSManagedContext(多线程)中的“相同”NSManagedObject 合并