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

ios – Core Data未将NSManagedObject实例的错误作为app delegate上的属性触发,第1张

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

 = 0x0b28ad30 <User: 0xb28ad30> (entity: User; ID: 0xb261160 <x-coredata:///User/tC48E8991-B8A6-4E68-9112-93F9F21DB5382> ; data: <fault>)

我的理解是,当我尝试访问此对象的某个属性时,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 DelegateNSManagedobjectContext *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;    User *newUserEntity = [NSEntityDescription insertNewObjectForEntityForname:@"User" inManagedobjectContext:localContext];    NSArray *emailsArray = [dictionary objectForKey:@"emails"];    Nsstring *emailsstring = @"";    if ([emailsArray count] > 0){      emailsstring = [emailsArray componentsJoinedByString:@","];    }    newUserEntity.emails = emailsstring;    newUserEntity.ID = [dictionary objectForKey:@"ID"];    newUserEntity.n = [dictionary nonNullObjectForKey:@"n"];  return newUserEntity;}//Access in one of the vIEw controllers    User *loggedInUser = [Utils getAppDelegate].loggedInUser;//    loggedInUser.ID /*nil*/
解决方法 我也有同样的问题.事实证明,根据引用 Apple docs的 this answer,NSManagedobject没有像你期望的那样拥有对其NSManagedobjectContext的强引用.我怀疑如果你检查你的对象没有正确解决错误[myObject managedobjectContext] == nil.

我不知道这里有什么最佳实践.显而易见(但可能很困难)的解决方案是找出您的MOC被解除分配的原因.作为替代方案,虽然我不确定它是否安全,但您可以保留每个NSManagedobject实例的MOC. (我对开放here有疑问.)

总结

以上是内存溢出为你收集整理的ios – Core Data未将NSManagedObject实例的错误作为app delegate上的属性触发全部内容,希望文章能够帮你解决ios – Core Data未将NSManagedObject实例的错误作为app delegate上的属性触发所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1056771.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存