相关疑难解决方法(0)

NSManagedObject的managedObjectContext属性为nil

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

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);
}
Run Code Online (Sandbox Code Playgroud)

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

然而,就在这个if语句之后(即使在内viewDidLoad,self.someManagedObject.managedObjectContext也是nil.我可以看到为什么局部变量不再可用(它只是超出范围),但是仍然应该设置托管对象的属性,对吧?

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

iphone core-data nsmanagedobjectcontext

5
推荐指数
1
解决办法
4292
查看次数

Core Data未将NSManagedObject实例的错误作为app delegate上的属性触发

我将登录用户的数据从服务器导入名为"用户"的核心数据实体.我还将这个特定用户对象的引用保存到我的AppDelegate(作为属性),以便我可以在我的应用程序的其他位置访问它.我面临的问题是,当我推送另一个视图控制器并尝试访问appdelegate.loggedInUser.id时,我看到"id"为零.调试器为对象显示以下内容:

$24 = 0x0b28ad30 <User: 0xb28ad30> (entity: User; id: 0xb261160 <x-coredata:///User/tC48E8991-B8A6-4E68-9112-93F9F21DB5382> ; data: <fault>)
Run Code Online (Sandbox Code Playgroud)

我的理解是,当我尝试访问此对象的某个属性时,Core Data框架将触发错误.我很困惑为什么我在这种情况下访问用户的"id"属性没有触发错误?

编辑:

这是创建和使用loggedInUser对象的方法:

//method to get bgContext 
+(NSManagedObjectContext *)getContextOnBgWithParentSetToMainMOC
{
  NSManagedObjectContext *tmpContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
  [tmpContext setParentContext:[Utils getAppDelegate].managedObjectContext];
  return tmpContext;
}

//in App Delegate
NSManagedObjectContext *bgContext = [NSManagedObjectContext getContextOnBgWithParentSetToMainMOC];
   self.loggedInUser = [User importFromObject:loggedInUserData inContext:bgContext completionBlock:^(NSManagedObjectContext *theContext, NSManagedObject *theManagedObjectWithValuesImported) {}];

//In User.m file
+ (User *)importFromObject:(NSDictionary *)dictionary inContext:(NSManagedObjectContext *)context completionBlock:(TemporaryContextImportReturnBlock)block {

  if ( !context ){
    context = [NSManagedObjectContext getContextOnBgWithParentSetToMainMOC];
  }

  NSManagedObjectContext *localContext = context; …
Run Code Online (Sandbox Code Playgroud)

core-data objective-c ios

5
推荐指数
1
解决办法
1999
查看次数