#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-classes5. Ах, хорошо — тогда это похоже на то, что делает Тим Роудли в своей последней книге Core Data. Думаю, мне нужно вернуться к чертежной доске. Спасибо за вашу помощь.