2012-06-10 8 views
3

Я довольно новичок в iOS, и в настоящее время я разрабатываю страницу «Создать новое событие» для своего приложения.iOS шаблоны для создания объекта перед сохранением?

Некоторая информация:

  1. пользователь может нажать на создать новое событие, а затем нажмите кнопку назад, чтобы отменить создание этого нового события. (Я использую UINavigationController)
  2. 1 видео может быть прикреплено к определенному событию.
  3. Пользователь может создать новое событие, записать видео, затем решает не продолжать его сохранение (путем нажатия)
  4. Каждое событие должно генерировать uuid. Этот uuid необходим для предотвращения столкновения объектов между разными клиентами, создающих события и отправки их на сервер.
  5. Каждый захваченный видео называется uuid .mov для хранения в файловой системе до того, как событие будет загружено на сервер.

Исходя из рельсов фона, я привык делать следующее:

  1. Когда пользователь нажимает на «Создать новую страницу событий», событие создается, но не сохраняется в БД.
  2. Затем пользователь вводит атрибуты страницы и решает, хочет ли он совершить
  3. При фиксации места события событие присваивается предоставленной информацией. Затем событие сохраняется.

Однако я не считаю, что у Core Data есть API, который позволяет разработчику создавать объект без его сохранения. В настоящее время я делаю что-то вроде этого:

  1. Когда пользователь посещает «создать новую страницу событий», пустой пул создается и хранится в db. Ссылка на экземпляр события передается контроллеру для создания новой страницы события.
  2. Когда пользователь вводит всю информацию и снимает видео (uuid создается при awakeFromInsert и устанавливается в течение 1), сохранение просто устанавливает объект с требуемым атрибутом.
  3. Если пользователь решает отменить создание события, я проверяю, нажата ли отмена. если это так, и событие, и видеофайл удаляются.

Код для проверки нажатия Отмена.

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    if (![[self.navigationController viewControllers] containsObject:self]) { 

Это немного сложно, если быть честным. У вас, ребята, есть лучшее предложение?

ответ

3

Это действительно работает так, как вы описали работу Rails: новые объекты не сохраняются в постоянном хранилище, пока вы их не зафиксируете (с помощью метода save:).

См. Creating and Deleting Managed Objects section of Core Data Programming Guide. Выписка ...

Простое создание управляемого объекта не приводит к его сохранению в постоянном хранилище . Контекст управляемого объекта действует как блокнот.Вы можете создавать и регистрировать объекты с ним, вносить изменения в объекты, и отменять и изменять изменения, как вы пожелаете. Если вы вносите изменения в управляемые объекты , связанные с данным контекстом, эти изменения остаются локальными для того контекста, пока вы не зафиксируете изменения, отправив контекст save: message. В этот момент - при отсутствии проверки ошибок - изменения фиксируются в хранилище.

+0

Чтобы добавить к этому, если вы хотите создать объект, который никогда не сохраняется в контексте основного объекта, вы можете создать «блокнот» или новый контекст NSManagedObject, в который вы можете внести изменения, а затем отбросить это или вы можете скопировать объекты в свой основной NSManagedObjectContext – LightningStryk

Смежные вопросы