NSManagedObjectContext
Экземпляр NSManagedObjectContext
представляет единственное «объектное пространство» или временную память в приложении. Его основная ответственность состоит в том, чтобы управлять набором управляемых объектов. Эти объекты формируют группу связанных объектов модели, представляющих внутренне непротиворечивое представление одного или более персистентных хранилищ. Экземпляр отдельного управляемого объекта существует в одном и только одном контексте, но многократные копии объекта могут существовать в различных контекстах. Таким образом объект uniquing ограничен по объему к определенному контексту.
Управление жизненным циклом
Контекст является мощным объектом с центральной ролью в жизненный цикл управляемых объектов, с ответственностью от управления жизненным циклом (включая сбой) к проверке, обработке обратной связи и отмене/восстановлению. Через контекст можно получить или «выбрать» объекты от персистентного хранилища, внести изменения в те объекты, и затем или отбросить изменения или — снова через контекст — фиксируют их назад персистентному хранилищу. Контекст ответственен за наблюдение за изменениями в его объектах и поддерживает менеджера по отмене, таким образом, можно иметь контроль с более прекрасными зернами над отменой и восстановлением. Можно вставить новые объекты и удалить, которые Вы выбрали и передаете эти модификации персистентному хранилищу.
Все объекты, выбранные от внешнего хранилища, регистрируются в контексте вместе с глобальным идентификатором (экземпляр NSManagedObjectID
) это используется для однозначного определения каждого объекта к внешнему хранилищу.
Родительское хранилище
Контексты управляемого объекта имеют родительское хранилище, от которого они получают данные, представляющие управляемые объекты и через который они передают изменения в управляемых объектах.
До OS X v10.7 и iOS v5.0, родительское хранилище всегда является персистентным координатором хранилища. В OS X v10.7 и позже и iOS v5.0 и позже, родительское хранилище может быть другим контекстом управляемого объекта. В конечном счете корень родословной контекста должен быть персистентным координатором хранилища. Координатор обеспечивает модель управляемого объекта и диспетчеризирует запросы различным персистентным хранилищам, содержащим данные.
Если родительское хранилище контекста является другим контекстом управляемого объекта, выборкой, и сохраните операции, установлены родительским контекстом вместо координатора. Этот образец имеет много сценариев использования, включая:
Выполнение фоновых работ на втором потоке или очереди.
Управляя отбрасываемыми редактированиями, такой как в окне инспектора или представлении.
Поскольку первый сценарий подразумевает, родительский контекст может запросы на обслуживание от дочерних элементов на различных потоках. Вы не можете, поэтому, использовать родительские контексты, создаваемые с типом ограничения потока (см. Параллелизм).
При сохранении изменений в контексте изменения только фиксируются, “каждый запасает”. При сохранении дочернего контекста изменения продвинуты к его родителю. Изменения не сохраняются к персистентному хранилищу, пока не сохраняется корневой контекст. (Корневой контекст управляемого объекта является тем, родительский контекст которого nil
.), Кроме того, родитель не вытягивает изменения от дочерних элементов, прежде чем он сохранит. Если Вы хотите в конечном счете фиксировать изменения, необходимо сохранить дочерний контекст.
Уведомления
Контекст отправляет уведомления в различных точках — посмотрите NSManagedObjectContextObjectsDidChangeNotification
например. Как правило, необходимо зарегистрироваться для получения этих уведомлений только из известных контекстов:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(<#Selector name#>)
name:NSManagedObjectContextDidSaveNotification
object:<#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 *)
request
error:(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 *)
request
error:(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 *)
objectID
error:(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 и позже.
См. также
– deletedObjects
isDeleted
(NSManagedObject
) -
Указывает хранилище, в котором будет сохранен недавно-вставленный-объект.
Объявление
Swift
func assignObject(_
object
: AnyObject, toPersistentStorestore
: NSPersistentStore)Objective C
- (void)assignObject:(id)
object
toPersistentStore:(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
объект, описывающий проблему.Возвращаемое значение
YES
true
если постоянный IDs получен для всех объектов вobjects
, иначеNO
false
.Обсуждение
Этот метод преобразовывает идентификатор объекта каждого управляемого объекта в
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 *)
object
mergeChanges:(BOOL)flag
Параметры
object
Управляемый объект.
flag
Булево значение.
Если
flag
NO
false
, тогдаobject
превращен в отказ, и потеряны любые незаконченные изменения. Объект остается отказом, пока к нему не получают доступ снова, в котором времени его значения свойств будут перезагружены от хранилища или в последний раз кэшировали состояние.Если
flag
YES
true
, тогдаobject
значения свойств перезагружаются от значений от хранилища или последнего кэшируемого состояния тогда любые изменения, внесенные (в локальном контексте), повторно применяются по тем (теперь недавно обновленный) значения. (Еслиflag
YES
true
слияние значений вobject
будет всегда успешно выполняться — в этом случае нет поэтому никакой такой вещи как “конфликт слияния” или слияние, которое не возможно.)Обсуждение
Если интервал переутомления (см.
stalenessInterval
) не был превышен, любые доступные кэшированные данные снова используются вместо того, чтобы выполнить новую выборку. Еслиflag
YES
true
, этот метод не влияет ни на какие переходные свойства; еслиflag
NO
false
, избавляются от переходных свойств.Вы обычно используете этот метод для обеспечения свежести данных, если больше чем один контекст управляемого объекта может использовать то же персистентное хранилище одновременно, в частности если Вы получаете оптимистический отказ блокировки при попытке сохранить.
Превращение
object
в отказ (flag
NO
false
) средние значения что сильные ссылки к связанным управляемым объектам (т.е. те, к который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
– registeredObjects
updatedObjects
isDeleted
(NSManagedObject
)
-
init (concurrencyType:) - initWithConcurrencyType:
Определяемый инициализаторИнициализирует контекст с данным типом параллелизма.
Объявление
Swift
init(concurrencyType
type
: 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
.Возвращаемое значение
YES
true
если сохранение успешно выполняется, иначеNO
false
.Обсуждение
Если были многократные ошибки (например, несколько отредактированных объектов имели отказы проверки), описание
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() -> Bool
Objective C
- (BOOL)tryLock
Возвращаемое значение
YES
true
если блокировка была получена,NO
false
иначе.Обсуждение
Этот метод сразу возвращается после попытки получить блокировку.
Оператор импорта
Objective C
@import CoreData;
Swift
import CoreData
Доступность
Доступный в OS X v10.4 и позже.
Осуждаемый в OS X v10.10.
См. также
-
Булевская переменная, указывающая, распространяет ли получатель, удаляет в конце события, в котором было внесено изменение.
Объявление
Swift
var propagatesDeletesAtEndOfEvent: Bool
Objective C
@property(nonatomic) BOOL propagatesDeletesAtEndOfEvent
Обсуждение
YES
true
если получатель распространяет, удаляет в конце события, в котором изменение было внесено,NO
false
если это распространяет, удаляет только во время работы сохранения. Значение по умолчаниюYES
true
.Оператор импорта
Objective C
@import CoreData;
Swift
import CoreData
Доступность
Доступный в OS X v10.4 и позже.
-
Булево значение, указывающее, сохраняет ли получатель сильные ссылки ко всем зарегистрированным управляемым объектам.
Объявление
Swift
var retainsRegisteredObjects: Bool
Objective C
@property(nonatomic) BOOL retainsRegisteredObjects
Обсуждение
Если установлено в
YES
true
, получатель сохраняет сильные ссылки ко всем зарегистрированным управляемым объектам. Если установлено вNO
false
, тогда получатель сохраняет сильные ссылки к зарегистрированным объектам только, когда они вставлены, обновлены, удалены или заблокированы. Значение по умолчаниюNO
false
.Оператор импорта
Objective C
@import CoreData;
Swift
import CoreData
Доступность
Доступный в OS X v10.4 и позже.
-
stalenessInterval stalenessInterval
СвойствоМаксимальный отрезок времени, который, возможно, протек начиная с хранилища ранее, выбрал данные прежде, чем выполнить проблемы отказа новая выборка вместо того, чтобы использовать ранее выбранные данные.
Объявление
Swift
var stalenessInterval: NSTimeInterval
Objective 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: AnyObject
Objective 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;
Константы
-
ConfinementConcurrencyType
NSConfinementConcurrencyType
Указывает, что контекст будет использовать образец ограничения потока.
Доступный в OS X v10.7 и позже.
-
PrivateQueueConcurrencyType
NSPrivateQueueConcurrencyType
Указывает, что контекст будет связан с частной очередью отгрузки.
Доступный в OS X v10.7 и позже.
-
MainQueueConcurrencyType
NSMainQueueConcurrencyType
Указывает, что контекст будет связан с основной очередью.
Доступный в 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;
Константы
-
NSInsertedObjectsKey
NSInsertedObjectsKey
Ключ для набора объектов, вставленных в контекст.
Доступный в OS X v10.4 и позже.
-
NSUpdatedObjectsKey
NSUpdatedObjectsKey
Ключ для набора обновленных объектов.
Доступный в OS X v10.4 и позже.
-
NSDeletedObjectsKey
NSDeletedObjectsKey
Ключ для набора объектов, отмеченных для удаления во время предыдущего события.
Доступный в OS X v10.4 и позже.
-
NSRefreshedObjectsKey
NSRefreshedObjectsKey
Ключ для набора обновленных объектов.
Доступный в OS X v10.5 и позже.
-
NSInvalidatedObjectsKey
NSInvalidatedObjectsKey
Ключ для набора лишенных законной силы объектов.
Доступный в OS X v10.5 и позже.
-
NSInvalidatedAllObjectsKey
NSInvalidatedAllObjectsKey
Ключ, указывающий, что все объекты в контексте были лишены законной силы.
Доступный в 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 и позже.