【问题标题】:App refresh needed to access relationship objects访问关系对象需要刷新应用程序
【发布时间】:2013-12-29 20:33:54
【问题描述】:

在我的应用中,我有两个实体 ItemsLists,其中项目可以属于一个列表,而列表可以有多个项目。

当我创建一个Lists 托管对象并将其分配给它的关系时,无法通过其关系检索项目对象(我之前创建的)。当我在控制台中打印出来时,我得到了这个:

正如您在第一张图片中看到的那样,has_items 确实包含一个项目,并且打印出 has_items 返回 null(打印在图片底部)。但是,当我刷新我的应用程序并尝试再次访问它时,它工作正常,但现在我得到一个关系错误的东西,我知道这不是错误或错误的东西,应该是这样。

请看图二,看看刷新后打印的变化。

我该如何解决这个问题? (问题的重新表述:能够将对象保存到关系属性,并在保存上下文后检索对象而不刷新应用程序)。

编辑:代码在这里

List *newList = [NSEntityDescription insertNewObjectForEntityForName:@"List" inManagedObjectContext:context];

[newList setValue:obj[@"list_name"] forKey:@"list_name"];
[newList addHas_membersObject:self.currentMember];
[newList setValue:@"NO" forKey:@"current_list"];
[newList setValue:@"YES" forKey:@"is_synced"];
[newList setValue:obj[@"objectId"] forKey:@"object_identifier"];

[context insertObject:newList];

[self saveContext:context WithCompletion:^ {NSLog(@"completion being handled");
    Items *newItem = [NSEntityDescription insertNewObjectForEntityForName:@"Items" inManagedObjectContext:context];
    [newItem setValue:item[@"item_detail"] forKey:@"item_detail"];
    [newItem setValue:@"YES" forKey:@"is_synced"];
    [newItem setValue:item.createdAt forKey:@"date_added"];
    [newItem setValue:item[@"is_checked"] forKey:@"is_checked"];
    [newItem setValue:newList forKey:@"belong_to_list"];

    [context insertObject:newItem];

    [newList addHas_itemsObject:newItem];
    NSError *error;
    [context save:&error];
    NSLog(@"item saved");
}

【问题讨论】:

  • 图片太小,看不到。还要添加一些有用的代码。谢谢。
  • @flexaddicted 首先感谢您的编辑。如果您想查看图片控件,请单击并在另一个选项卡中打开。图片宽度很大。如果还有问题我会上传新的。至于我现在尝试添加的代码。谢谢
  • 因此,保存后您应该执行[newList valueForKey:@"has_items"],您将能够访问您的新对象。届时将提供NSSet 的项目。能否请您格式化代码?谢谢。
  • @flexaddicted 啊啊啊啊啊啊我永远也学不会!我的应用程序正在核心数据和云之间同步。在某些时候,如果用户是旧的但重新安装了我想恢复他的数据的应用程序。猜猜是什么问题?我放错了列表数组,并且在恢复数据时没有对其进行初始化。 掌心 无论如何,谢谢你,我不会让你离开我想这是你第二次帮助我。输入答案,我会检查它是否正确。
  • 不客气。而且不是问题。您可以只回复自己的答案,以便其他人可以看到您找到的解决方案。谢谢。

标签: ios objective-c core-data


【解决方案1】:

在我的代码中的某个时刻,我忘记初始化应该保存对象的数组,我总是返回 null。所以永远记得初始化你的数组(我个人永远不会知道)。

【讨论】:

  • 不记得尽可能将其标记为已回答。再次感谢。
猜你喜欢
  • 2012-10-08
  • 1970-01-01
  • 2018-02-15
  • 2011-05-12
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
相关资源
最近更新 更多