UIPickerView выбирает сущность из managedObjectContext - PullRequest
0 голосов
/ 19 апреля 2011

Я некоторое время борюсь с проблемой, связанной с CoreData:

У меня есть приложение на основе View с вкладкой в ​​нем. Первые две вкладки являются контроллерами представления, которые отображают содержимое из моих CoreData, третья вкладка имеет UIPickerView, где я могу выбирать данные. Затем третий и второй контроллеры представления должны выбрать правильную сущность на основе выбора UIPickerView.

Чтобы прояснить это немного подробнее: в моем управляемом объектном контексте у меня 16 сущностей. Основываясь на выборе UIPickerView в ThirdViewController, я хочу использовать соответствующую сущность и обновить FirstViewController и SecondViewController.

Это также должно быть постоянным решением, чтобы пользователь мог выйти из приложения, но выбор из UIPickerView должен быть сохранен. Может быть, это что-то для NSUserDefaults?

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 21 апреля 2011

Мне не совсем ясно, нужно ли вам сохранять имя объекта или определенный управляемый объект, но в обоих случаях решение одно и то же: вам нужно сохранить ссылку в NSUserDefaults.

Чтобы сохранить сущность в пользовательских настройках по умолчанию, вы просто сохраните имя сущности в виде строки.Так что-то вроде:

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

... и для его извлечения:

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

Если вам нужно сохранить ссылку на определенный управляемый объект, вам нужно сохранить управляемый объектИдентификатор сохраненного объекта.Экономия очень важна.До сохранения контекста, в котором был создан объект, идентификатор объекта имеет только временное значение, которое изменяется при сохранении.Любая ссылка на объект будет потеряна, если вы используете временное значение.

Чтобы сохранить идентификатор объекта:

  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];

(Приведенный выше код не скомпилирован и может содержать опечатки, так что непросто скопируйте и вставьте его.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...