【问题标题】:UIPickerView selects entity from managedObjectContextUIPickerView 从 managedObjectContext 中选择实体
【发布时间】:2011-04-19 07:31:12
【问题描述】:

一段时间以来,我一直在努力解决与 CoreData 相关的问题:

我有一个基于视图的应用程序,其中有一个标签栏。 前两个选项卡是显示来自我的 CoreData 内容的视图控制器,第三个选项卡有一个 UIPickerView,我可以在其中选择数据。 第三个和第二个视图控制器应该根据 UIPickerView 选择选择正确的实体。

为了进一步澄清这一点:在我的 managedobjectcontext 中,我有 16 个实体。基于 ThirdViewController 中的 UIPickerView 选择,我想使用相应的实体并更新 FirstViewController 和 SecondViewController。

这也应该是一个持久的解决方案,以便用户可以退出应用程序,但应该存储来自 UIPickerView 的选择。也许这是 NSUserDefaults 的东西?

任何帮助将不胜感激!

【问题讨论】:

  • 我不清楚你在问什么。您是在问如何将某些内容保存到 Core Data 中?您是否在问是否应该使用 Core Data 而不是用户默认值?您是在问如何将特定的托管对象传递给另一个视图控制器?
  • 哦,很抱歉造成了一些混乱。我不想将某些内容保存到 Core Data。再澄清一次:我有 3 个 ViewController: ViewController #1:显示来自 Core Data 的数据 ViewController #2:显示来自 Core Data 的数据 ViewController #3:有一个 UIPickerView,让用户可以从 Core Data 中选择一个具有其属性的实体.
  • 我想要的是以下内容:当用户从 ViewController #3 中选择一个实体时,此信息应永久存储,以便 ViewController #1 和 #2 始终知道(即使用户退出应用程序- 没有背景!),他们应该从哪个实体获取数据。我说清楚了吗?
  • 您说“实体”,但我认为您的意思是特定的托管对象。实体之于管理对象就像类之于实例。例如。您的数据模型中可能有一个Person 实体来描述一个人,即名字、姓氏,但是一个特定的人,比如“Bob Smith”将由初始化为Person 实体的特定托管对象来描述。你需要从 ViewController#3 中持久化哪个。

标签: objective-c core-data


【解决方案1】:

我不清楚您是否需要保存实体名称或特定托管对象,但在这两种情况下,解决方案是相同的:您需要在 NSUserDefaults 中存储引用。

要将实体存储在用户默认值中,您只需将实体名称保存为字符串。所以像:

  [[NSUserDefaults standardUserDefaults] setValue:entityNameString forKey:@"currentlySelectedEntity"];

...并检索它:

  NSString *currentEntity=[[[NSUserDefaults standardUserDefaults] valueForKey:@"currentlySelectedEntity"];

如果您需要保存对特定托管对象的引用,则需要保存 已保存 对象的托管对象 ID。储蓄非常重要。在保存创建对象的上下文之前,对象 ID 只有一个临时值,该值将在保存时更改。如果您使用临时值,对对象的任何引用都将丢失。

保存对象 ID:

  NSManagedObject *mo=[NSEntityDescription insertNewObjectForEntityForName:@"TestEntity" inManagedObjectContext:self.managedObjectContext];
  //... save the context
  NSManagedObjectID *moID=[mo objectID];
  NSURL *moIDURI=[moID URIRepresentation];
  [[NSUserDefaults standardUserDefaults] setValue:moIDURI forKey:@"currentlySelectedTestObject"];

...检索它:

  NSURL *uri=[[NSUserDefaults standardUserDefaults] valueForKey:@"currentlySelectedTestObject"];
  NSManagedObjectID *moID=[self.persistentStoreCoordinator managedObjectIDForURIRepresentation:uri];  
  NSManagedObject *mo=[self.managedObjectContext objectRegisteredForID:moID];

(以上代码未编译,可能有错别字,请勿复制粘贴。)

【讨论】:

  • 这正是我想要的!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多