Индексация уровня метаданных хранилища

В основанном на документе приложении, где данные Центра внимания должны быть связаны с отдельными файлами, можно добавить данные, которые должны быть индексированы как метаданные для персистентного хранилища. Ваше средство импорта добавляет информацию от метаданных до индекса Центра внимания.

Метаданные хранилища

Можно связать метаданные с персистентным хранилищем. Шаблон кода для проверок средства импорта Центра внимания, чтобы видеть, является ли файл хранилища тем, что должно быть индексировано. Если так, это читает соответствующие метаданные хранилища и передает надлежащие значения индексатору Центра внимания.

Метаданные являются словарем пар ключ/значение. Базовые Данные автоматически устанавливают значения для 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:. Вы используете эти методы в средстве импорта для извлечения данных для передачи индексатору.