NSManagedObjectContext
Экземпляр NSManagedObjectContext представляет единственное «объектное пространство» или временную память в приложении. Его основная ответственность состоит в том, чтобы управлять набором управляемых объектов. Эти объекты формируют группу связанных объектов модели, представляющих внутренне непротиворечивое представление одного или более персистентных хранилищ. Экземпляр отдельного управляемого объекта существует в одном и только одном контексте, но многократные копии объекта могут существовать в различных контекстах. Таким образом объект uniquing ограничен по объему к определенному контексту.
Управление жизненным циклом
Контекст является мощным объектом с центральной ролью в жизненный цикл управляемых объектов, с ответственностью от управления жизненным циклом (включая сбой) к проверке, обработке обратной связи и отмене/восстановлению. Через контекст можно получить или «выбрать» объекты от персистентного хранилища, внести изменения в те объекты, и затем или отбросить изменения или — снова через контекст — фиксируют их назад персистентному хранилищу. Контекст ответственен за наблюдение за изменениями в его объектах и поддерживает менеджера по отмене, таким образом, можно иметь контроль с более прекрасными зернами над отменой и восстановлением. Можно вставить новые объекты и удалить, которые Вы выбрали и передаете эти модификации персистентному хранилищу.
Все объекты, выбранные от внешнего хранилища, регистрируются в контексте вместе с глобальным идентификатором (экземпляр NSManagedObjectID) это используется для однозначного определения каждого объекта к внешнему хранилищу.
Родительское хранилище
Контексты управляемого объекта имеют родительское хранилище, от которого они получают данные, представляющие управляемые объекты и через который они передают изменения в управляемых объектах.
До OS X v10.7 и iOS v5.0, родительское хранилище всегда является персистентным координатором хранилища. В OS X v10.7 и позже и iOS v5.0 и позже, родительское хранилище может быть другим контекстом управляемого объекта. В конечном счете корень родословной контекста должен быть персистентным координатором хранилища. Координатор обеспечивает модель управляемого объекта и диспетчеризирует запросы различным персистентным хранилищам, содержащим данные.
Если родительское хранилище контекста является другим контекстом управляемого объекта, выборкой, и сохраните операции, установлены родительским контекстом вместо координатора. Этот образец имеет много сценариев использования, включая:
Выполнение фоновых работ на втором потоке или очереди.
Управляя отбрасываемыми редактированиями, такой как в окне инспектора или представлении.
Поскольку первый сценарий подразумевает, родительский контекст может запросы на обслуживание от дочерних элементов на различных потоках. Вы не можете, поэтому, использовать родительские контексты, создаваемые с типом ограничения потока (см. Параллелизм).
При сохранении изменений в контексте изменения только фиксируются, “каждый запасает”. При сохранении дочернего контекста изменения продвинуты к его родителю. Изменения не сохраняются к персистентному хранилищу, пока не сохраняется корневой контекст. (Корневой контекст управляемого объекта является тем, родительский контекст которого nil.), Кроме того, родитель не вытягивает изменения от дочерних элементов, прежде чем он сохранит. Если Вы хотите в конечном счете фиксировать изменения, необходимо сохранить дочерний контекст.
Уведомления
Контекст отправляет уведомления в различных точках — посмотрите NSManagedObjectContextObjectsDidChangeNotification например. Как правило, необходимо зарегистрироваться для получения этих уведомлений только из известных контекстов:
[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(<#Selector name#>)name:NSManagedObjectContextDidSaveNotificationobject:<#A managed object context#>];
Несколько системных платформ используют Базовые Данные внутренне. Если Вы регистрируетесь для получения этих уведомлений из всех контекстов (путем передачи nil как параметр объекта к методу такой как addObserver:selector:name:object:), тогда можно получить неожиданные уведомления, которые трудно обработать.
Параллелизм
Базовый поток использования Данных (или сериализированная очередь) ограничение для защиты управляемых объектов и контекстов управляемого объекта (см. Параллелизм с Базовыми Данными). Последствие этого - то, что контекст предполагает, что владелец по умолчанию является потоком или очередью, выделившей его — это определяется потоком, вызывающим init метод. Вы не должны, поэтому, инициализировать контекст на одном потоке, тогда передают его различному потоку. Вместо этого необходимо передать ссылку на персистентного координатора хранилища и иметь поток/очередь получения, создают новый контекст, полученный из этого. Если Вы используете NSOperation, необходимо создать контекст в main (для последовательной очереди) или start (для параллельной очереди).
В OS X v10.7 и позже и iOS v5.0 и позже при создании контекста можно указать образец параллелизма, с которым Вы будете использовать его использование initWithConcurrencyType:. Когда Вы создаете контекст управляемого объекта с помощью initWithConcurrencyType: у Вас есть три опции для его потока (очередь) ассоциация
Ограничение (
NSConfinementConcurrencyType)Для назад совместимости это - значение по умолчанию. Вы обещаете, что контекст не будет использоваться никаким потоком кроме того, на котором Вы создали его. В целом для создания поведения явным Вы призваны использовать один из других типов вместо этого.
Если родительское хранилище контекста управляемого объекта является персистентным координатором хранилища, можно только использовать этот тип параллелизма.
Частная очередь (
NSPrivateQueueConcurrencyType)Контекст создает и управляет частной очередью.
Основная очередь (
NSMainQueueConcurrencyType)Контекст связан с основной очередью, и как таковой связывается в цикл событий приложения, но это иначе подобно частному основанному на очереди контексту. Вы используете этот тип очереди для контекстов, соединенных с контроллерами и объектами пользовательского интерфейса, требующимися, чтобы использоваться только на основном потоке.
При использовании контекстов с помощью образца ограничения Вы отправляете сообщения контекстов непосредственно; Вам решать, чтобы гарантировать, чтобы Вы отправили сообщения от правильной очереди.
Вы используете контексты с помощью основанных на очереди типов параллелизма в сочетании с performBlock: и performBlockAndWait:. Вы группируете «стандартные» сообщения для отправки к контексту в блоке для передачи одному из этих методов. Существует два исключения:
Методы установщика для основанных на очереди контекстов управляемого объекта ориентированы на многопотоковое исполнение. Можно вызвать эти методы непосредственно на любой поток.
Если Ваш код выполняется на основном потоке, можно вызвать методы на основные контексты стиля очереди непосредственно вместо того, чтобы использовать блок, базируемый API.
performBlock: и performBlockAndWait: гарантируйте, что блочные операции выполняются на очереди, указанной для контекста. performBlock: метод сразу возвращается, и контекст выполняет блочные методы на своем собственном потоке. С performBlockAndWait: метод, контекст все еще выполняет блочные методы на своем собственном потоке, но метод не возвращается, пока блок не выполняется.
Важно ценить, что блоки выполняются как отличное собрание произведений. Как только Ваши концы блока, кто-либо еще может ставить в очередь другой блок, изменения отмены, сбросьте контекст и т.д. Таким образом блоки могут быть довольно большими, и обычно заканчиваться путем вызова save:.
__block NSError *error;__block BOOL savedOK = NO;[myMOC performBlockAndWait:^{// Do lots of things with the context.savedOK = [myMOC save:&error];}];
Можно также выполнить другие операции, такие как:
NSFetchRequest *fr = [NSFetchRequest fetchRequestWithEntityName:@"Entity"];__block NSUInteger rCount = 0;[context performBlockAndWait:^() {NSError *error;rCount = [context countForFetchRequest:fr error:&error];if (rCount == NSNotFound) {// Handle the error.} }];NSLog(@"Retrieved %d items", (int)rCount);
Разделение на подклассы примечаний
Вы строго отговорены разделить на подклассы NSManagedObjectContext. Отслеживание изменений и механизмы управления отменой высоко оптимизированы и следовательно сложные и хрупкие. Вмешиваясь Ваша собственная дополнительная логика, которая могла бы повлиять processPendingChanges может иметь непредвиденные обстоятельства. В ситуациях, таких как миграция хранилища, Базовые Данные создадут экземпляры NSManagedObjectContext для его собственного использования. При этих обстоятельствах Вы не можете полагаться ни на какие функции своего пользовательского подкласса. Любой NSManagedObject подкласс должен всегда быть полностью совместим с NSManagedObjectContext (т.е. это не может полагаться на функции подкласса NSManagedObjectContext).
Соответствует
-
AnyObject -
CVarArgType -
Сопоставимый -
Hashable -
NSCoding -
NSLocking -
NSObjectProtocol -
Печатаемый -
NSCoding -
NSLocking -
NSObject
Оператор импорта
Swift
import CoreData
Objective C
@import CoreData;
Доступность
Доступный в OS X v10.4 и позже.
-
Возвращает массив объектов, удовлетворяющих критерии, указанные данным запросом выборки.
Объявление
Swift
func executeFetchRequest(_request: NSFetchRequest, errorerror: NSErrorPointer) -> [AnyObject]?Objective C
- (NSArray *)executeFetchRequest:(NSFetchRequest *)requesterror:(NSError **)errorПараметры
requestЗапрос выборки, указывающий критерии поиска для выборки.
errorЕсли существует проблема, выполняющая выборку, по возврату содержит экземпляр
NSErrorэто описывает проблему.Возвращаемое значение
Массив объектов, удовлетворяющих критерии, указанные
requestвыбранный от получателя и от персистентных хранилищ связался с персистентным координатором хранилища получателя. Если ошибка происходит, возвратыnil. Если никакие объекты не соответствуют критерии, указанныеrequest, возвращает пустой массив.Обсуждение
Возвращенные объекты регистрируются в получателе.
Следующие моменты важны для рассмотрения:
Если запрос выборки не имеет никакого предиката, то все экземпляры указанного объекта получены, по модулю другие критерии ниже.
Объект, удовлетворяющий критерии, указанные
request(это - экземпляр объекта, указанного запросом, и это соответствует предикат запроса, если существует один), и это было вставлено в контекст, но который еще не сохраняется к персистентному хранилищу, получен, если запрос выборки выполняется на том контексте.Если объект в контексте был изменен, предикат оценен против его измененного состояния, не против текущего состояния в персистентном хранилище. Поэтому, если объект в контексте был изменен таким образом, что он удовлетворяет критерии запроса выборки, запрос получает его, даже если изменения не были сохранены к хранилищу, и значения в хранилище таковы, что он не удовлетворяет критерии. С другой стороны, если объект в контексте был изменен таким образом, что он не соответствует запрос выборки, запрос выборки не получит его, даже если действительно будет соответствовать версия в хранилище.
Если объект был удален из контекста, запрос выборки не получает его, даже если то удаление не было сохранено к хранилищу.
Объекты, понятые (заполненный, запущенные отказы, “читал из”, и т.д.), а также ожидание обновленного, вставленного или удаленного, никогда не изменяются работой выборки без вмешательства разработчика. Если Вы выбираете некоторые объекты, работу с ними, и затем выполняете новую выборку, включающую надмножество тех объектов, Вы не получаете новые экземпляры или обновляете данные для существующих объектов — Вы получаете существующие объекты с их текущим состоянием в памяти.
Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
Возвращает число объектов, которые возвратил бы данный запрос выборки, если бы это было передано
executeFetchRequest:error:.Объявление
Swift
func countForFetchRequest(_request: NSFetchRequest, errorerror: NSErrorPointer) -> IntObjective C
- (NSUInteger)countForFetchRequest:(NSFetchRequest *)requesterror:(NSError **)errorПараметры
requestЗапрос выборки, указывающий критерии поиска для выборки.
errorЕсли существует проблема, выполняющая выборку, по возврату содержит экземпляр
NSErrorэто описывает проблему.Возвращаемое значение
Число объектов, которые возвратил бы данный запрос выборки, если бы это было передано
executeFetchRequest:error:, илиNSNotFoundесли происходит ошибка.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.5 и позже.
-
Если объект регистрируется в получателе, возвращает объект для указанного ID.
Объявление
Swift
func objectRegisteredForID(_objectID: NSManagedObjectID) -> NSManagedObject?Objective C
- (NSManagedObject *)objectRegisteredForID:(NSManagedObjectID *)objectIDПараметры
objectIDИдентификатор объекта.
Возвращаемое значение
Объект для указанного ID, если это регистрируется в получателе, иначе
nil.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
Возвращает объект для указанного ID.
Объявление
Swift
func objectWithID(_objectID: NSManagedObjectID) -> NSManagedObjectObjective C
- (NSManagedObject *)objectWithID:(NSManagedObjectID *)objectIDПараметры
objectIDИдентификатор объекта.
Возвращаемое значение
Объект для указанного ID.
Обсуждение
Если объект не регистрируется в контексте, он может быть выбран или возвращен как отказ. Этот метод всегда возвращает объект. Данные в персистентном хранилище, представленном
objectIDкак предполагается, существует — если это не делает, возвращенный объект выдает исключение при доступе к любому свойству (т.е. когда отказ запущен). Преимущество этого поведения - то, что оно позволяет Вам создавать и использовать отказы, затем создайте базовые данные позже или в отдельном контексте.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
Возвращает объект для указанного ID.
Объявление
Swift
func existingObjectWithID(_objectID: NSManagedObjectID, errorerror: NSErrorPointer) -> NSManagedObject?Objective C
- (NSManagedObject *)existingObjectWithID:(NSManagedObjectID *)objectIDerror:(NSError **)errorПараметры
objectIDИдентификатор объекта для нужного объекта.
errorЕсли существует проблема в получении объекта, указанного
objectID, по возврату содержит ошибку, описывающую проблему.Возвращаемое значение
Объект, указанный
objectID. Если объект не может быть выбран, или не существует или не может быть дан сбой, он возвращаетсяnil.Обсуждение
Если существует управляемый объект с данным ID, уже зарегистрированным в контексте, тот объект возвращается непосредственно; иначе соответствующий объект дан сбой в контекст.
Если данные не кэшируются, этот метод мог бы выполнить I/O.
В отличие от этого
objectWithID:, этот метод никогда не возвращает отказ.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.6 и позже.
См. также
-
registeredObjects registeredObjectsСвойствоНабор объектов зарегистрировался в получателе. (только для чтения)
Объявление
Swift
var registeredObjects: NSSet { get }Objective C
@property(nonatomic, readonly, strong) NSSet *registeredObjectsОбсуждение
Контекст управляемого объекта не отправляет уведомления наблюдения значения ключа когда возвращаемое значение
registeredObjectsизменения.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
Регистрирует объект, который будет вставлен в персистентное хранилище получателя в следующий раз, когда изменения сохраняются.
Объявление
Swift
func insertObject(_object: NSManagedObject)Objective C
- (void)insertObject:(NSManagedObject *)objectПараметры
objectУправляемый объект.
Обсуждение
Управляемый объект (
object) регистрируется в получателе с временным глобальным ID. Когда изменения фиксируются, это присваивается постоянный глобальный ID. Если текущая операция откатывается (например, если получатель отправляется arollbackсообщение) перед работой сохранения, объект не зарегистрирован от получателя.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
См. также
-
Указывает объект, который должен быть удален из его персистентного хранилища, когда фиксируются изменения.
Объявление
Swift
func deleteObject(_object: NSManagedObject)Objective C
- (void)deleteObject:(NSManagedObject *)objectПараметры
objectУправляемый объект.
Обсуждение
Когда изменения фиксируются,
objectбудет удален из uniquing таблиц. Еслиobjectеще не был сохранен к персистентному хранилищу, оно просто удалено из получателя.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
См. также
– deletedObjectsisDeleted(NSManagedObject) -
Указывает хранилище, в котором будет сохранен недавно-вставленный-объект.
Объявление
Swift
func assignObject(_object: AnyObject, toPersistentStorestore: NSPersistentStore)Objective C
- (void)assignObject:(id)objecttoPersistentStore:(NSPersistentStore *)storeПараметры
objectУправляемый объект.
storeПерсистентное хранилище.
Обсуждение
Можно получить хранилище от персистентного координатора хранилища, с помощью, например,
persistentStoreForURL:.Специальные замечания
Только необходимо использовать этот метод, если персистентный координатор хранилища получателя управляет имеющими многократными перезаписываемыми хранилищами
objectобъект в их конфигурации. Поддержание конфигураций в модели управляемого объекта может избавить от необходимости вызов этого метода непосредственно во многих ситуациях. Если только одно хранилище имеет, если персистентный координатор хранилища получателя управляет только единственным перезаписываемым хранилищем, илиobjectобъект в его модели,objectбудет автоматически присвоен тому хранилищу.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
Преобразовывает в постоянный IDs идентификаторы объектов объектов в данном массиве.
Объявление
Swift
func obtainPermanentIDsForObjects(_objects: [AnyObject], errorerror: NSErrorPointer) -> BoolПараметры
objectsМассив управляемых объектов.
errorЕсли ошибка происходит, по возврату содержит
NSErrorобъект, описывающий проблему.Возвращаемое значение
YEStrueесли постоянный IDs получен для всех объектов вobjects, иначеNOfalse.Обсуждение
Этот метод преобразовывает идентификатор объекта каждого управляемого объекта в
objectsк постоянному ID. Несмотря на то, что объект будет иметь постоянный ID, он все еще ответит положительно наisInsertedпока это не сохраняется. Любой объект, уже имеющий постоянный ID, проигнорирован.Любой объект, не уже присвоенный хранилищу, присваивается на основе того же использования Данных Ядра правил для присвоения во время работы сохранения (сначала перезаписываемое хранилище, поддерживающее объект, и подходящий для экземпляра и его связанных элементов).
Специальные замечания
Этот метод приводит к транзакции с базовым хранилищем, изменяющим дату модификации файла.
В OS X это заканчивается дополнительное рассмотрение при вызове этого метода на контекст управляемого объекта, связанный с экземпляром
NSPersistentDocument. ЭкземплярыNSDocumentпотребность знать, что они находятся в синхронизации с базовым содержанием. Для предотвращения проблем после вызова этого метода, необходимо поэтому обновить дату модификации документа (использованиеsetFileModificationDate:).Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.5 и позже.
-
Отмечает объект для обнаружения конфликта.
Объявление
Swift
func detectConflictsForObject(_object: NSManagedObject)Objective C
- (void)detectConflictsForObject:(NSManagedObject *)objectПараметры
objectУправляемый объект.
Обсуждение
Если на следующем вызове
save:objectбыл изменен в его персистентном хранилище, сбоях сохранения. Это позволяет оптимистическую блокировку для неизменных объектов. Обнаружение конфликта всегда выполняется на измененных или удаленных объектах.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
Обновляет персистентные свойства управляемого объекта использовать последние значения от персистентного хранилища.
Объявление
Swift
func refreshObject(_object: NSManagedObject, mergeChangesflag: Bool)Objective C
- (void)refreshObject:(NSManagedObject *)objectmergeChanges:(BOOL)flagПараметры
objectУправляемый объект.
flagБулево значение.
Если
flagNOfalse, тогдаobjectпревращен в отказ, и потеряны любые незаконченные изменения. Объект остается отказом, пока к нему не получают доступ снова, в котором времени его значения свойств будут перезагружены от хранилища или в последний раз кэшировали состояние.Если
flagYEStrue, тогдаobjectзначения свойств перезагружаются от значений от хранилища или последнего кэшируемого состояния тогда любые изменения, внесенные (в локальном контексте), повторно применяются по тем (теперь недавно обновленный) значения. (ЕслиflagYEStrueслияние значений вobjectбудет всегда успешно выполняться — в этом случае нет поэтому никакой такой вещи как “конфликт слияния” или слияние, которое не возможно.)Обсуждение
Если интервал переутомления (см.
stalenessInterval) не был превышен, любые доступные кэшированные данные снова используются вместо того, чтобы выполнить новую выборку. ЕслиflagYEStrue, этот метод не влияет ни на какие переходные свойства; еслиflagNOfalse, избавляются от переходных свойств.Вы обычно используете этот метод для обеспечения свежести данных, если больше чем один контекст управляемого объекта может использовать то же персистентное хранилище одновременно, в частности если Вы получаете оптимистический отказ блокировки при попытке сохранить.
Превращение
objectв отказ (flagNOfalse) средние значения что сильные ссылки к связанным управляемым объектам (т.е. те, к которыйobjectимеет ссылку), повреждаются, таким образом, можно также использовать этот метод для обрезки части графа объектов, Вы хотите ограничить использование памяти.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
Вынуждает получатель обработать изменения в графе объектов.
Объявление
Swift
func processPendingChanges()Objective C
- (void)processPendingChangesОбсуждение
Этот метод заставляет изменения в зарегистрированных управляемых объектах быть зарегистрированными с менеджером по отмене.
В находящихся в AppKit приложениях этот метод вызывается автоматически, по крайней мере, один раз во время цикла событий (в конце цикла) — это можно вызвать чаще, чем это, если платформа должна объединить Ваши изменения прежде, чем сделать что-то еще. Можно также вызвать его вручную для объединения любых незаконченных необработанных изменений.
Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
См. также
-
insertedObjects insertedObjectsСвойствоНабор объектов, вставленных в получатель, но еще не сохраненных в персистентном хранилище. (только для чтения)
Объявление
Swift
var insertedObjects: NSSet { get }Objective C
@property(nonatomic, readonly, strong) NSSet *insertedObjectsОбсуждение
Контекст управляемого объекта не отправляет уведомления наблюдения значения ключа когда возвращаемое значение
insertedObjectsизменения — это действительно, однако, отправляет aNSManagedObjectContextObjectsDidChangeNotificationуведомление, когда изменение внесено, и aNSManagedObjectContextWillSaveNotificationи aNSManagedObjectContextDidSaveNotificationуведомление прежде и после изменений фиксируется соответственно.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
updatedObjects updatedObjectsСвойствоНабор объектов зарегистрировался в получателе, которые отменили фиксацию изменений. (только для чтения)
Объявление
Swift
var updatedObjects: NSSet { get }Objective C
@property(nonatomic, readonly, strong) NSSet *updatedObjectsОбсуждение
Контекст управляемого объекта не отправляет уведомления наблюдения значения ключа когда возвращаемое значение
updatedObjectsизменения. Контекст действительно, однако, отправляет aNSManagedObjectContextObjectsDidChangeNotificationуведомление, когда изменение внесено, и aNSManagedObjectContextWillSaveNotificationуведомление и aNSManagedObjectContextDidSaveNotificationуведомление прежде и после изменений фиксируется соответственно.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
deletedObjects deletedObjectsСвойствоНабор объектов, которые будут удалены из их персистентного хранилища во время следующей работы сохранения. (только для чтения)
Объявление
Swift
var deletedObjects: NSSet { get }Objective C
@property(nonatomic, readonly, strong) NSSet *deletedObjectsОбсуждение
Возвращенный набор не обязательно включает все объекты, удаленные (использование
deleteObject:) — если объект был вставлен и удален без прошедшей работы сохранения, он не включен в набор.Контекст управляемого объекта не отправляет уведомления наблюдения значения ключа когда возвращаемое значение
deletedObjectsизменения. Контекст действительно, однако, отправляет aNSManagedObjectContextObjectsDidChangeNotificationуведомление, когда изменение внесено, и aNSManagedObjectContextWillSaveNotificationуведомление и aNSManagedObjectContextDidSaveNotificationуведомление прежде и после изменений фиксируется соответственно (несмотря на то, что снова набор удаленных объектов, данных дляNSManagedObjectContextDidSaveNotificationне включает объекты, вставленные и удаленные без прошедшей работы сохранения — т.е. они никогда не сохранялись к персистентному хранилищу).Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
См. также
– deleteObject:insertedObjects– registeredObjectsupdatedObjectsisDeleted(NSManagedObject)
-
init (concurrencyType:) - initWithConcurrencyType:Определяемый инициализаторИнициализирует контекст с данным типом параллелизма.
Объявление
Swift
init(concurrencyTypetype: NSManagedObjectContextConcurrencyType)Objective C
- (instancetype)initWithConcurrencyType:(NSManagedObjectContextConcurrencyType)typeПараметры
typeОбразец параллелизма, с которым будет использоваться контекст.
Возвращаемое значение
Контекст, инициализированный для использования данного типа параллелизма.
Обсуждение
Для получения дополнительной информации на использовании этого метода, посмотрите Параллелизм.
Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.7 и позже.
См. также
-
concurrencyType concurrencyTypeСвойствоТип параллелизма для получателя. (только для чтения)
Объявление
Swift
var concurrencyType: NSManagedObjectContextConcurrencyType { get }Objective C
@property(readonly) NSManagedObjectContextConcurrencyType concurrencyTypeОбсуждение
Для получения дополнительной информации на типе параллелизма, посмотрите Параллелизм.
Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.7 и позже.
См. также
-
Объединяет изменения, указанные в данном уведомлении.
Объявление
Swift
func mergeChangesFromContextDidSaveNotification(_notification: NSNotification)Objective C
- (void)mergeChangesFromContextDidSaveNotification:(NSNotification *)notificationПараметры
notificationЭкземпляр
NSManagedObjectContextDidSaveNotificationуведомление отправляется другим контекстом.Обсуждение
Этот метод обновляет любые объекты, обновленные в другом контексте, отказах в любых недавно-вставленных-объектах, и вызывает
deleteObject:: на тех, которые были удалены.Можно передать a
NSManagedObjectContextDidSaveNotificationуведомление, отправленное контекстом управляемого объекта на другом потоке, однако, Вы не должны использовать управляемые объекты в пользовательском информационном словаре непосредственно. Для получения дополнительной информации посмотрите Параллелизм с Базовыми Данными.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.5 и позже.
-
undoManager undoManagerСвойствоМенеджер по отмене получателя.
Объявление
Swift
var undoManager: NSUndoManager?Objective C
@property(nonatomic, strong) NSUndoManager *undoManagerОбсуждение
Можно установить менеджера по отмене в
nilотключить поддержку отмены. Это обеспечивает выигрыш в производительности, если Вы не хотите поддерживать отмену для определенного контекста, например в большом процессе импорта — см. Базовое Руководство по программированию Данных.Если контекст не имеет менеджера по отмене, можно включить поддержку отмены путем установки один. Если Вы хотите интегрировать операции отмены контекста с другим менеджером по отмене в Вашем приложении, можно также заменить менеджера по отмене контекста.
Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
Отправляет сообщение отмены менеджеру по отмене получателя, прося, чтобы оно для обращения последних незафиксированных изменений применилось к объектам в графе объектов.
Объявление
Swift
func undo()Objective C
- (void)undoОператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
Отправляет сообщение восстановления менеджеру по отмене получателя, прося, чтобы оно для инвертирования последней работы отмены применилось к объектам в графе объектов.
Объявление
Swift
func redo()Objective C
- (void)redoОператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
См. также
-
Возвращает получатель его основному состоянию.
Объявление
Swift
func reset()Objective C
- (void)resetОбсуждение
Об управляемых объектах всего получателя «забывают». При использовании этого метода необходимо гарантировать, чтобы Вы также отбросили ссылки на любые управляемые объекты, выбранные с помощью получателя, так как они будут недопустимы впоследствии.
Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
См. также
-
Удаляет все из стека отмены, отбрасывает все вставки и удаления, и восстанавливает обновленные объекты к их последним зафиксированным значениям.
Объявление
Swift
func rollback()Objective C
- (void)rollbackОбсуждение
Этот метод не повторно выбирает данные от персистентного хранилища или хранилищ.
Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
Попытки передать несохраненные изменения в зарегистрированных объектах к родительскому хранилищу получателя.
Объявление
Swift
func save(_error: NSErrorPointer) -> BoolObjective C
- (BOOL)save:(NSError **)errorПараметры
errorУказатель на
NSErrorобъект. Вы не должны создаватьNSErrorобъект. Аварийные прекращения работы работы сохранения после первого отказа, если Вы передаетеNULL.Возвращаемое значение
YEStrueесли сохранение успешно выполняется, иначеNOfalse.Обсуждение
Если были многократные ошибки (например, несколько отредактированных объектов имели отказы проверки), описание
NSErrorвозвращенный указывает, что были многократные ошибки, и его userInfo словарь содержит ключNSDetailedErrors. Значение связалось сNSDetailedErrorsключ является массивом, содержащим частное лицоNSErrorобъекты.Если родительское хранилище контекста является персистентным координатором хранилища, то изменения посвящают себя внешнему хранилищу. Если родительское хранилище контекста является другим контекстом управляемого объекта, то
save:только управляемые объекты обновлений в том родительском хранилище. Для передачи изменений во внешнем хранилище необходимо сохранить изменения в цепочке контекстов до и включая контекст, родитель которого является персистентным координатором хранилища.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
hasChanges hasChangesСвойствоБулево значение, указывающее, отменил ли получатель фиксацию изменений. (только для чтения)
Объявление
Swift
var hasChanges: Bool { get }Objective C
@property(nonatomic, readonly) BOOL hasChangesОбсуждение
Если Вы наблюдаете это свойство с помощью наблюдения значения ключа (KVO), Вы не должны касаться контекста или его объектов в Вашей реализации
observeValueForKeyPath:ofObject:change:context:для этого уведомления. (Это вызвано тем, что запутанности расположений уведомлений KVO — например, контекст может быть посреди работы отмены или восстановления конфликта слияния.), Если необходимо отправить сообщения в контекст или изменить какой-либо из его управляемых объектов в результате изменения в значенииhasChanges, необходимо сделать так после того, как стек вызовов раскручивается (обычно использованиеperformSelector:withObject:afterDelay:или похожий метод).Специальные замечания
В OS X v10.6 и позже, это свойство является значением ключа, наблюдающим совместимый.
Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
Персистентный координатор хранилища получателя.
Объявление
Swift
var persistentStoreCoordinator: NSPersistentStoreCoordinator?Objective C
@property(strong) NSPersistentStoreCoordinator *persistentStoreCoordinatorВозвращаемое значение
Персистентный координатор хранилища получателя.
Обсуждение
Координатор обеспечивает модель управляемого объекта и обрабатывает постоянство. Обратите внимание на то, что многократные контексты могут совместно использовать координатора. Может не быть
nil.Установка
persistentStoreCoordinatorкnilповысит исключение. Если Вы хотите “разъединить" контекст от его персистентного координатора хранилища, необходимо просто установить все сильные ссылки в контекст кnilи позвольте ему обычно освобождаться.Для получения дополнительной информации посмотрите Родительское Хранилище.
Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
parentContext parentContextСвойствоРодительский контекст получателя. (только для чтения)
Объявление
Swift
var parentContext: NSManagedObjectContext?Objective C
@property(strong) NSManagedObjectContext *parentContextОбсуждение
nilуказывает, что нет никакого родительского контекста. Для получения дополнительной информации посмотрите Родительское Хранилище.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.7 и позже.
См. также
-
блокировка () - блокировка(OS X v10.10)Попытки получить блокировку на получателе.
Объявление
Swift
func lock()Objective C
- (void)lockОбсуждение
Этот метод блокирует выполнение потока, пока не может быть получена блокировка. Приложение защищает критический раздел кода, требуя, чтобы поток получил блокировку прежде, чем выполнить код. Как только критический раздел проходит, поток оставляет блокировку путем вызова
unlock.Отправка этого сообщения к контексту управляемого объекта помогает платформе понять объем транзакции в многопоточной среде. Предпочтительно использовать
NSManagedObjectContextреализацияNSLockingвместо этого использование отдельного взаимоисключающего объекта.Если Вы блокируете (или успешно
tryLock) контекст управляемого объекта, поток, в котором выполняется вызов блокировки, должны сохранить сильную ссылку к контексту, пока это не вызывает, разблокировали, иначе если контекст будет освобожден, то это приведет к мертвой блокировке.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
Осуждаемый в OS X v10.10.
См. также
-
разблокируйте () - разблокировать(OS X v10.10)Оставляет ранее полученную блокировку.
Объявление
Swift
func unlock()Objective C
- (void)unlockОператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
Осуждаемый в OS X v10.10.
См. также
-
tryLock () - tryLock(OS X v10.10)Попытки получить блокировку.
Объявление
Swift
func tryLock() -> BoolObjective C
- (BOOL)tryLockВозвращаемое значение
YEStrueесли блокировка была получена,NOfalseиначе.Обсуждение
Этот метод сразу возвращается после попытки получить блокировку.
Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
Осуждаемый в OS X v10.10.
См. также
-
Булевская переменная, указывающая, распространяет ли получатель, удаляет в конце события, в котором было внесено изменение.
Объявление
Swift
var propagatesDeletesAtEndOfEvent: BoolObjective C
@property(nonatomic) BOOL propagatesDeletesAtEndOfEventОбсуждение
YEStrueесли получатель распространяет, удаляет в конце события, в котором изменение было внесено,NOfalseесли это распространяет, удаляет только во время работы сохранения. Значение по умолчаниюYEStrue.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
Булево значение, указывающее, сохраняет ли получатель сильные ссылки ко всем зарегистрированным управляемым объектам.
Объявление
Swift
var retainsRegisteredObjects: BoolObjective C
@property(nonatomic) BOOL retainsRegisteredObjectsОбсуждение
Если установлено в
YEStrue, получатель сохраняет сильные ссылки ко всем зарегистрированным управляемым объектам. Если установлено вNOfalse, тогда получатель сохраняет сильные ссылки к зарегистрированным объектам только, когда они вставлены, обновлены, удалены или заблокированы. Значение по умолчаниюNOfalse.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
stalenessInterval stalenessIntervalСвойствоМаксимальный отрезок времени, который, возможно, протек начиная с хранилища ранее, выбрал данные прежде, чем выполнить проблемы отказа новая выборка вместо того, чтобы использовать ранее выбранные данные.
Объявление
Swift
var stalenessInterval: NSTimeIntervalObjective C
@property NSTimeInterval stalenessIntervalОбсуждение
Интервал переутомления управляет, использует ли выполнение отказа данные, ранее выбранные приложением, или выпускает новую выборку (см. также
refreshObject:mergeChanges:). Интервал переутомления не влияет на использующиеся в настоящее время объекты (т.е. он не используется для автоматического обновления значений свойств от персистентного хранилища после определенного периода времени).Значение истечения срока применяется на на объектное основание. Это - относительное время, пока кэшированные данные (снимки) нельзя считать устаревшими. Например, значение 300,0 сообщает контексту для использования кэшируемой информации в течение не больше, чем 5 минут после того, как был первоначально выбран объект.
Обратите внимание на то, что интервал переутомления является подсказкой и не может поддерживаться всеми персистентными типами хранилища. Это не используется XML и двоичными хранилищами, потому что эти хранилища поддерживают всю текущую стоимость в памяти.
Значение по умолчанию является отрицательной величиной, представляющей бесконечное позволенное переутомление.
0.0не представляет “приемлемого переутомления”.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
mergePolicy mergePolicyСвойствоПолитика слияния получателя.
Объявление
Swift
var mergePolicy: AnyObjectObjective C
@property(strong) id mergePolicyОбсуждение
Значение по умолчанию
NSErrorMergePolicy. Для возможных значений посмотритеNSMergePolicy.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
Асинхронно выполняет данный блок на очереди получателя.
Объявление
Swift
func performBlock(_block: () -> Void)Objective C
- (void)performBlock:(void (^)(void))blockПараметры
blockБлок для выполнения.
Обсуждение
Если контекст был инициализирован с помощью, Вы используете этот метод для отправки сообщений в управляемые объекты
NSPrivateQueueConcurrencyTypeилиNSMainQueueConcurrencyType.Этот метод инкапсулирует пул автовыпуска и вызов к
processPendingChanges.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.7 и позже.
См. также
-
Синхронно выполняет данный блок на очереди получателя.
Объявление
Swift
func performBlockAndWait(_block: () -> Void)Objective C
- (void)performBlockAndWait:(void (^)(void))blockПараметры
blockБлок для выполнения.
Обсуждение
Если контекст был инициализирован с помощью, Вы используете этот метод для отправки сообщений в управляемые объекты
NSPrivateQueueConcurrencyTypeилиNSMainQueueConcurrencyType.Этот метод можно безопасно вызвать повторно используемо.
Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.7 и позже.
См. также
-
Пользовательская информация получателя.
Объявление
Swift
var userInfo: NSMutableDictionary? { get }Objective C
@property(nonatomic, readonly, strong) NSMutableDictionary *userInfoОператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.7 и позже.
Типы данных
-
Константы для указания образца параллелизма, с которым будет использоваться контекст.
Объявление
Swift
enum NSManagedObjectContextConcurrencyType : UInt { case ConfinementConcurrencyType case PrivateQueueConcurrencyType case MainQueueConcurrencyType }Objective C
enum { NSConfinementConcurrencyType = 0x00, NSPrivateQueueConcurrencyType = 0x01, NSMainQueueConcurrencyType = 0x02 }; typedef NSUInteger NSManagedObjectContextConcurrencyType;Константы
-
ConfinementConcurrencyTypeNSConfinementConcurrencyTypeУказывает, что контекст будет использовать образец ограничения потока.
Доступный в OS X v10.7 и позже.
-
PrivateQueueConcurrencyTypeNSPrivateQueueConcurrencyTypeУказывает, что контекст будет связан с частной очередью отгрузки.
Доступный в OS X v10.7 и позже.
-
MainQueueConcurrencyTypeNSMainQueueConcurrencyTypeУказывает, что контекст будет связан с основной очередью.
Доступный в OS X v10.7 и позже.
Обсуждение
См. также
initWithConcurrencyType:и параллелизм с базовыми данными.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.7 и позже.
-
-
Базовые Данные используют эти строковые константы в качестве ключей в пользовательском информационном словаре в уведомлении NSManagedObjectContextObjectsDidChangeNotification.
Объявление
Swift
let NSInsertedObjectsKey: NSString! let NSUpdatedObjectsKey: NSString! let NSDeletedObjectsKey: NSString! let NSRefreshedObjectsKey: NSString! let NSInvalidatedObjectsKey: NSString! let NSInvalidatedAllObjectsKey: NSString!Objective C
NSString * const NSInsertedObjectsKey; NSString * const NSUpdatedObjectsKey; NSString * const NSDeletedObjectsKey; NSString * const NSRefreshedObjectsKey; NSString * const NSInvalidatedObjectsKey; NSString * const NSInvalidatedAllObjectsKey;Константы
-
NSInsertedObjectsKeyNSInsertedObjectsKeyКлюч для набора объектов, вставленных в контекст.
Доступный в OS X v10.4 и позже.
-
NSUpdatedObjectsKeyNSUpdatedObjectsKeyКлюч для набора обновленных объектов.
Доступный в OS X v10.4 и позже.
-
NSDeletedObjectsKeyNSDeletedObjectsKeyКлюч для набора объектов, отмеченных для удаления во время предыдущего события.
Доступный в OS X v10.4 и позже.
-
NSRefreshedObjectsKeyNSRefreshedObjectsKeyКлюч для набора обновленных объектов.
Доступный в OS X v10.5 и позже.
-
NSInvalidatedObjectsKeyNSInvalidatedObjectsKeyКлюч для набора лишенных законной силы объектов.
Доступный в OS X v10.5 и позже.
-
NSInvalidatedAllObjectsKeyNSInvalidatedAllObjectsKeyКлюч, указывающий, что все объекты в контексте были лишены законной силы.
Доступный в OS X v10.5 и позже.
-
-
NSManagedObjectContextObjectsDidChangeNotification NSManagedObjectContextObjectsDidChangeNotificationОтправленный, когда изменяются значения свойств объектов, содержавшихся в контексте управляемого объекта.
Уведомление отправляется во время processPendingChanges, после того, как изменения были обработаны, но прежде чем будет безопасно вызвать, сохраните: снова (если Вы пробуете, Вы генерируете бесконечный цикл).
Объект уведомления является контекстом управляемого объекта. userInfo словарь содержит следующие ключи:
NSInsertedObjectsKey,NSUpdatedObjectsKey, иNSDeletedObjectsKey.Обратите внимание на то, что это уведомление отправляется только, когда изменяются управляемые объекты; когда управляемые объекты добавляются к контексту как результат выборки, это не отправляется.
Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
Отправленный каждый раз, когда контекст управляемого объекта завершает работу сохранения.
Объект уведомления является контекстом управляемого объекта. userInfo словарь содержит следующие ключи:
NSInsertedObjectsKey,NSUpdatedObjectsKey, иNSDeletedObjectsKey.Можно только использовать управляемые объекты в этом уведомлении на том же потоке, на котором оно было отправлено.
Можно передать объект уведомления
mergeChangesFromContextDidSaveNotification:на другом потоке однако Вы не должны использовать управляемый объект в пользовательском информационном словаре непосредственно по другому потоку. Для получения дополнительной информации посмотрите Параллелизм с Базовыми Данными.Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.4 и позже.
-
Отправленный каждый раз, когда контекст управляемого объекта собирается выполнить работу сохранения.
Объект уведомления является контекстом управляемого объекта. Нет никакого userInfo словаря.
Оператор импорта
Objective C
@import CoreData;Swift
import CoreDataДоступность
Доступный в OS X v10.5 и позже.
