Передача атрибутов основных данных из ViewController в другой ViewController

#ios #iphone #core-data #uiviewcontroller

#iOS #iPhone #core-data #uiviewcontroller

Вопрос:

Я полный новичок в iOS и Core Data. Я следил Lynda.com это пример основных данных, и я все еще пытаюсь уловить суть всего.

В моей текущей сборке есть UITableViewController (назовем его resultsTVC), который передает выбранный objectAtIndex в UIViewController (displayUserVC). Мне было интересно, есть ли возможность передать данные, уже загруженные из UIViewController (displayUserVC), в другой UIViewController (addMoviesVC)?

В принципе, нужно ли где-то сохранять текущие выбранные элементы в этом UIViewController (displayUserVC), или есть возможность получить доступ к тому, что уже загружено в UIViewController (displayUserVC), в новый UIViewController (addMoviesVC)?

Спасибо, ребята

Комментарии:

1. Если ваш переход осуществляется через UIStoryboard segue, вы можете использовать этот prepareForSegue метод и передать свои displayUserVC переменные в общедоступные переменные addMoviesVC через свойство контроллера представления назначения segue.

2. Простите меня за то, что я довольно наивен, но что именно вы передаете? Я предполагаю, что вы должны передать текущий managedObjectContext дальше?

3. Для этого ответа он предлагает передать объект напрямую. Как только вы прочитаете объект из CoreData, он будет в вашей памяти, поэтому вы можете передать его, если у вас есть ссылка на меня

4. таким образом, этот объект все еще находится в памяти и может быть передан дальше. Извините, если это очень прямолинейно, но какой объект я передаю в segue? — это NSFetchRequest или NSManagedObject?

Ответ №1:

Способ, которым я видел, как это делается, и рекомендую создать синглтон ManagedObjectContext , доступный из нескольких виртуальных машин. Затем в вашем prepareForSegue вы передаете идентификатор объекта следующему VC. Затем этот VC при загрузке может получить ссылку на ваш контекст и загрузить все, что вам нужно для этого. Это позволяет вашему VC уже иметь файл MOC на случай, если вам нужно внести в него какие-либо изменения (например, редактирование / удаление / вставка в CoreData).

Комментарии:

1. Может ли этот одноэлементный класс обрабатывать несколько сущностей и отношений? У меня их около 4. Извините, если это глупый вопрос — я все еще новичок в Core data.

2. Цель синглтона — создать один экземпляр, который используется во всем приложении — это гарантирует, что у вас не будет нескольких экземпляров MOC во всем приложении и вы не будете беспокоиться о том, что ваши данные должны синхронизироваться между ними. Одноэлементный класс не является новым объектом — он просто возвращает тот же MOC любому VC, который пытается получить к нему доступ. На ваш вопрос: Да. Он работает над корпоративным приложением с более чем 3 МБ в базе данных CoreData и около 14 объектами с общим количеством связей ~ 60.

3. Просто интересно — является ли AppDelegate технически одноэлементным, когда вы устанавливаете флажок «использовать основные данные»? По сути, вы можете импортировать AppDelegate в каждый класс, чтобы получить эти объекты core data?

4. Технически вы можете поместить его в AppDelegate и AppDidFinishLaunching создать его экземпляр. Затем возвращайте объект в любое время, когда кто-то захочет получить к нему доступ. Другой подход заключается в том, что если вы хотите создать класс CoreData, который вы можете импортировать в каждый класс, взгляните на эту статью о том, как реализовать синглтон. Обратите внимание на dispatch_once, который вы бы обернули вокруг своего MOC кода инициализации, который гарантирует, что у вас есть только один экземпляр MOC , который вы передаете каждому классу, пытающемуся его захватить. galloway.me.uk/tutorials/singleton-classes

5. Ах, хорошо — тогда это похоже на то, что делает Тим Роудли в своей последней книге Core Data. Думаю, мне нужно вернуться к чертежной доске. Спасибо за вашу помощь.