Подтвердить что ты не робот

Объяснение NSIncrementalStore на английском языке

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

После прочтения статьи Дрю Кроуфорда, руководство по программированию, ссылка на класс и этот учебник пару раз каждый я все еще пытаюсь понять, что такое NSIncremental магазин, почему и когда вы его используете.

Может кто-нибудь объяснить это?

Edit
после прочтения ответа мунди я вижу, что требуется дополнительный контекст. Я изучаю использование основных данных в сочетании с веб-службой, которую я создаю. Я пытаюсь найти лучший способ хранить информацию о пользователях локально на устройстве и отправлять на веб-службу при наличии соединения. Недостаток знаний по основным данным вызвал мои исследования, но я не смог полностью понять полезность NSIncrementalStore.

4b9b3361

Ответ 1

ПРИМЕЧАНИЕ: этот API был омрачен, когда я написал это в 2012 году, и детали изменились. Не стесняйтесь обновлять это, если хотите. На данный момент я не работаю над любыми проектами Cocoa/ObjC, поэтому, к сожалению, я не очень хороший человек, чтобы держать его в курсе последних событий. Кажется, что общий смысл верен.

Core Data предоставляет набор инструментов, которые помогают управлять сохранением объектов, т.е. возможностью сохранять, а затем возвращать наборы объектов (NSManagedObject) из какого-либо хранилища.

Когда вы работаете с объектами Core Data, вы делаете это с помощью NSManagedObjectContext, который вы получаете из NSPersistentStoreCoordinator. В свою очередь, PSC ведет переговоры с одним или несколькими подклассами NSPersistentStore, которые обрабатывают фактические операции в хранилище. (Подумайте о создании/чтении/обновлении/удалении по базе данных.)

Core Data поддерживает два основных типа хранилища: NSPersistentStore и NSAtomicStore. Постоянное хранилище можно рассматривать как базу данных: вы можете инкрементно сохранять, обновлять и извлекать из него произвольные наборы записей. Атомный магазин представляет собой "все или ничто" представление графа объектов. Он предназначен для представления структурированного файла в памяти.

Типы хранилища, с которыми связаны Core Data:

  • NSSQLLiteStoreType (NSPersistentStore)
  • NSInMemoryStoreType (NSPersistentStore)
  • NSXMLStoreType (NSAtomicStore)
  • NSBinaryStoreType (NSAtomicStore)

NSPersistentStore явно запрещается быть подклассом, поэтому до сих пор не было никакого способа создать собственный собственный неатомный бэкенд. То есть, если вы хотите сохранить и запросить представления ваших объектов по частям, а не в одном большом компе ( "загрузить весь график", "сохранить весь график" ), вам не повезло. До появления iOS5 NSIncrementalStore.

NSIncrementalStore - это абстрактный класс (от NSPersistentStore), методы которого вы реализуете, чтобы обеспечить адаптер между хранилищем данных, который вы контролируете, и мир основных данных. Вы можете использовать его для переноса удаленного API, или если бы вы были так склонны, вы могли бы обернуть что-то вроде NULevelDB или NanoStore (хотя я не уверен, почему вы это сделаете).

Ответ 2

Вы использовали бы NSIncrementalStore для доступа к удаленному серверу через Core Data. Вместо того, чтобы читать и записывать в локальный файл, вы должны направить запрос на сервер и получить ответ, который вы нажимаете на Core Data. Аналогично для сохранения и т.д.

Обратите внимание, однако, что это нетривиально. Это очень мощная функция, но, если вы не являетесь экспертом в области использования основных данных, я бы сильно отговаривал ее, так как есть бесконечные возможности стрелять в ногу, если вы не знаете много о том, как взаимодействие Core Data с уровнем хранения работы.

Если использование uploaded решает вашу проблему, тогда сделайте это.

Ответ 3

Вкратце, если вы используете хранилище SQLite с вашими основными данными, вы уже используете инкрементное хранилище. Все преимущества инкрементных магазинов (т.е. В основном, не загружая весь магазин в память) уже находятся в вашем распоряжении.

Что касается конкретного применения API NSIncrementalStore, я бы предложил сначала определить, какую именно проблему вы хотите решить. Если вам нужен этот API или нет, это будет определяться конкретными потребностями вашей задачи программирования.


EDIT в ответ на редактирование вопроса

Я бы просто сделал это так: в ваших объектах Core Data на устройстве вы можете иметь атрибут BOOL uploaded. Когда веб-служба станет доступной, запустите загрузку и вытащите все объекты, а не uploaded.

Чтобы загрузить, преобразуйте свои объекты в NSArray и NSDictionary, возможно, в формат JSON и POST на свой веб-сайт. Когда веб-сайт отвечает, что он сохранил данные, отметьте все объекты как uploaded.