Я добавил веб-разметку на свой веб-сайт, чтобы элементы отображались в результатах поиска Spotlight, когда пользователи выполняют поиск в iOS 9. Пользователи могут просматривать те же элементы в приложении, поэтому я хочу создать объекты NSUserActivity, которые ссылаются на веб-контент как пользователи просматривают элементы.

Теперь у NSUserActivity есть свойство contentAttributeSet, которое я буду использовать, чтобы прикрепить миниатюру фотографии к действию. CSSearchableItemAttributeSet имеет некоторые свойства, которые также есть у NSUserActivity, поэтому я не уверен, какое из них мне следует реализовать, и следует ли указывать одни и те же данные для обоих. Могу ли я установить title для NSUserActivity, а также title для CSSearchableItemAttributeSet, или только одно или другое? То же самое с keywords, которое также является свойством обоих.

NSUserActivity *activity = [[NSUserActivity alloc] initWithActivityType:@“com.domain.appname-something"];
activity.title = @“My Title";
activity.keywords = [NSSet setWithArray:@[@“one", @“two", @“three"]];
activity.userInfo = @{@“id": @“12345"};
activity.requiredUserInfoKeys = [NSSet setWithArray:@[@“id"]];
activity.eligibleForSearch = YES;
activity.eligibleForPublicIndexing = YES;
activity.webpageURL = [NSURL URLWithString:@"https://someurl.com"];

//QUESTION: Do I need to duplicate title and keywords here:
CSSearchableItemAttributeSet *contentAttributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeImage];
contentAttributeSet.title = activity.title;
contentAttributeSet.displayName = activity.title;
contentAttributeSet.keywords = [activity.keywords allObjects];
contentAttributeSet.contentDescription = @“My Description Here";
contentAttributeSet.thumbnailData = [self generateImage];

activity.contentAttributeSet = contentAttributeSet;
7
Jordan H 25 Дек 2015 в 00:27

2 ответа

Лучший ответ

После разговора с DTS на эту тему они пришли к следующему выводу:

Что касается свойств, таких как keywords, которые могут быть установлены как для NSUserActivity и встроенные NSUserActivity CSSearchableItemAttributeSet, совет от Core Spotlight инженерия заключается в том, что вы устанавливаете их только на CSSearchableItemAttributeSet.

[title и displayName] более или менее одинаковы, с мягким подразумевается, что, если у предмета действительно длинное название, это будет свойство title и сокращенное название войдут в displayName свойство.

1
Jordan H 21 Фев 2016 в 19:47

Если указано свойство title как для NSUserActivity, так и для CSSearchableItemAttributeSet, тогда

  1. Товар доступен для поиска по обоим заголовкам.
  2. Результат поиска будет иметь заголовок, указанный в экземпляре NSUserActivity.

Если указано свойство keyword как для NSUserActivity, так и для CSSearchableItemAttributeSet, то элемент доступен для поиска с использованием ключевых слов, указанных в экземпляре CSSearchableItemAttributeSet, а не ключевых слов, указанных в экземпляре NSUserActivity.

Конфликтов не возникает, если свойства установлены для NSUserActivity или CSSearchableItemAttributeSet.

Таким образом, при использовании CSSearchableItemAttributeSet с NSUserActivity мы можем пропустить установку свойств CSSearchableItemAttributeSet, которые являются общими для класса NSUserActivity.

1
PGDev 18 Янв 2016 в 09:09