CoreData - как добавить несколько объектов в отношение «многие» - PullRequest
4 голосов
/ 07 декабря 2011

Хорошо, так что этот вопрос в два раза.

Я создаю приложение для напоминания счета и хочу использовать CoreData для хранения всех данных (которые я новичок). Я настроил все свои сущности и отношения (отношения Биллаунда «один ко многим» со счетами). Таким образом, на счете может быть много счетов.

Вопрос 1: Итак, кто-то вводит данные учетной записи и устанавливает, сколько раз будет повторяться счет, и нажимает «Сохранить». Как создать объект BillAccount, затем выполнить цикл и добавить все счета для только что добавленного BillAccount? Я могу легко добавить один счет и счет, но не знаю, как добавить несколько счетов к одному счету.

Вопрос 2: Как я могу добавить дополнительный счет к существующему счету BillAccount после того, как я уже создал счет BillAccount ... поэтому редактирование счета не добавляется в первый раз? Обязательно сначала установите объект BillAccount и получите его уникальный идентификатор. Я немного смущен этим.

Некоторые базовые примеры кода были бы великолепны. Спасибо за вашу помощь.

1 Ответ

10 голосов
/ 07 декабря 2011

Я предполагаю (извините, если я ошибаюсь), что вы не генерировали классы для своих основных сущностей данных.Если нет -

  1. Получить внутри вашей модели в Xcode
  2. В редакторе основных данных выберите все ваши объекты.
  3. В меню Xcode перейдите в Editor ->create managedObject SubClass
  4. Установите местоположение и сохраните.

Теперь перейдите в файловую систему вашего проекта и найдите класс сущности BillAccount.в файле .h вы найдете, что Xcode сгенерировал для вас методы «CoreDataGeneratedAccessors»:

- (void)addBillsObject:(Bills *)value;
- (void)removeBillsObject:(Bills *)value;
- (void)addBills:(NSSet *)values;
- (void)removeBills:(NSSet *)values;

Теперь к первому вопросу

  1. Получите все объекты счетов, которые вы хотите добавитьна счет
  2. Создать NSSet и передать на него все счета
  3. Добавить набор на счет счета

      NSSet * billsForAccount = [NSSet setWithArray:allTheBills];
      [billAccount addBills:billsForAccount];
    

И это все для добавления множества счетов в одну учетную запись.

Что касается вашего второго вопроса:

  1. Обычный сценарий, который я обнаружил, заключается в том, что вы представляете пользователю все учетные записи, каждую учетную запись.хранится в строке tableView (вы можете использовать NSFetchResultController для этого, но сейчас получить доступ к нему будет невозможно).
  2. На данный момент вы можете хранить все учетные записи в массиве при их установке.tableView.
  3. Когда пользователь выбирает строку, сохраните выбранную учетную запись, получив indexPath.row из tableView и получив соответствующую учетную запись из массива.
  4. Теперь используйте этот объектдобавить счета, пока пользователь не выберет другую учетную запись.

    Array *allAccounts = [BillAccount allObjects];//will get all of the accounts
    //in the table view methods - use this array to set the tableView rows
    
      //in the userDidSelectRowForIndexPath use
    BillAccount *selectedAccount = [allAccounts objectAtIndex:indexPath.row];
    
    //now use this for adding the bills. (you might want to pass the selected account to other viewController or any other way appropriate to your App structure.
    //when you want to add new bill use
    [selectedAccount addBillsObject:billObject];
    
...