Индексация уровня метаданных хранилища
В основанном на документе приложении, где данные Центра внимания должны быть связаны с отдельными файлами, можно добавить данные, которые должны быть индексированы как метаданные для персистентного хранилища. Ваше средство импорта добавляет информацию от метаданных до индекса Центра внимания.
Метаданные хранилища
Можно связать метаданные с персистентным хранилищем. Шаблон кода для проверок средства импорта Центра внимания, чтобы видеть, является ли файл хранилища тем, что должно быть индексировано. Если так, это читает соответствующие метаданные хранилища и передает надлежащие значения индексатору Центра внимания.
Метаданные являются словарем пар ключ/значение. Базовые Данные автоматически устанавливают значения для NSStoreType
и NSStoreUUID
. Для устанавливания пользовательских ключей и значений Вы делаете непостоянную копию существующего словаря, добавляете Ваши собственные пары ключ/значение, которые будут считаны средством импорта, и затем устанавливают обновленный словарь как метаданные для хранилища.
Необходимо быть осторожными, какую информацию Вы помещаете в метаданные по двум причинам:
Центр внимания налагает предел размеру метаданных.
Тиражирование всего документа в метаданных, вероятно, не полезно.
Вспомните, что возможно создать URL для идентификации определенного объекта в хранилище (использование URIRepresentation
) — URL может быть полезным для включения как метаданные. Большие метаданные лучше всего сохранены отдельно от файла базы данных. Например, кэшируемые изображения для QuickLooks являются намного более дешевыми для хранения в специализированном файле на диске, который может быть с отображенной памятью в, чем сохраненный в метаданных базы данных.
Установка метаданных
Вы устанавливаете метаданные для хранилища с помощью NSPersistentStore
метод setMetadata:forPersistentStoreWithURL:error:
.
NSError *error = nil; |
NSURL *storeURL = <#URL for persistent store#>; |
NSDictionary *metadata = |
[NSPersistentStore metadataForPersistentStoreWithURL:storeURL error:&error]; |
if (metadata == nil) { |
/* Deal with the error. */ |
} |
else { |
NSMutableDictionary *newMetadata = [metadata mutableCopy]; |
[newMetadata setObject:@[@"MyKeyWord"] forKey:(__bridge id<NSCopying>)kMDItemKeywords]; |
// Set additional key-value pairs as appropriate. |
[NSPersistentStore setMetadata:newMetadata |
forPersistentStoreWithURL:storeURL |
error:&error]; |
} |
Обратите внимание на то, что установка метаданных для хранилища не изменяет информацию о диске, пока фактически не сохраняется хранилище.
Чтение метаданных
NSPersistentStoreCoordinator
обеспечивает метод класса, metadataForPersistentStoreWithURL:error:
, это позволяет Вам получать метаданные от хранилища без издержек создания Базового Стека данных. Можно также использовать NSPersistentStore
метод metadataForPersistentStoreWithURL:error:
. Вы используете эти методы в средстве импорта для извлечения данных для передачи индексатору.