iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 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>)

我的理解是,当我尝试访问此对象的某个属性时,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;
    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*/
@H_301_24@解决方法
我也有同样的问题.事实证明,根据引用 Apple docsthis answer,NsmanagedObject没有像你期望的那样拥有对其NsmanagedObjectContext的强引用.我怀疑如果你检查你的对象没有正确解决错误[myObject managedObjectContext] == nil.

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

@H_673_28@

大佬总结

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。