gpt4 book ai didi

iphone - NSManagedObject 的 ManagedObjectContext 属性为 nil

转载 作者:行者123 更新时间:2023-12-03 18:41:54 26 4
gpt4 key购买 nike

我正在尝试创建一个临时托管对象上下文,在用户输入信息的几个屏幕之后,我将该上下文与主上下文合并(以确保没有插入“不完整”的对象)。这就是我创建临时上下文以及在其中插入对象的方式:

if (!self.someManagedObject) {

NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:@[[NSBundle mainBundle]]];
NSPersistentStoreCoordinator *storeCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
[storeCoordinator addPersistentStoreWithType:NSInMemoryStoreType configuration:nil URL:nil options:nil error:nil];

NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator:storeCoordinator];

self.someManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"SomeObject" inManagedObjectContext:managedObjectContext];
NSLog(@"%@", self.someManagedObject.managedObjectContext);
}

这是viewDidLoad的一部分。在控制台中,它显示托管对象上下文有一个值。

但是,在此 if 语句之后(即使在 viewDidLoad 中,self.someManagedObject.managementObjectContext 为 nil。我可以明白为什么局部变量不再可用(它只是超出了范围),但是仍然应该设置托管对象的属性,对吗?

我知道我可以创建一个属性来存储托管对象上下文,但我宁愿让它以这种方式工作。

最佳答案

我最近再次遇到了同样的问题,尽管情况不同。我需要一个临时的托管对象上下文,与主对象上下文完全分开,但我再次遇到了它超出范围后消失的问题。这次我决定进一步调查,最终意识到 managementObjectContext 不是 NSManagedObject 的属性,而是一个方法。这意味着以下两件事之一:

  1. 如果它使用底层实现中的属性,则该属性 will not hold a strong reference结合上下文
  2. 如果托管对象上下文是以其他方式派生的,它也不会保留对该上下文的强引用。

无论哪种情况,上下文都没有强引用,超出范围,并且 NSManagedObject 具有 nil managedObjectContext

解决方案是通过为其创建强大的属性来简单地保留上下文。

关于iphone - NSManagedObject 的 ManagedObjectContext 属性为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11787025/

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