UIPickerView从managedObjectContext中选择实体

时间:2011-04-19 07:31:12

标签: objective-c core-data

我正在努力解决与CoreData相关的问题一段时间了:

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

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

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

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我不清楚您是否需要保存实体名称或特定托管对象,但在两种情况下解决方案都是相同的:您需要在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];

(以上代码未经编译,可能包含拼写错误,因此请勿复制并粘贴。)