Сделать действия приложений и состояния поиска с помощью NSUserActivity
Ниже приведен код, который я пытаюсь реализовать, чтобы сделать действия приложений и состояния доступны для поиска, но не могут отображаться при поиске в iOS
NSUserActivity *userActivity = [[NSUserActivity alloc]initWithActivityType:@"com.mycompany.activity-type"];
userActivity.title = @"Hello world from in app search";
userActivity.keywords = [NSSet setWithArray:@[@"Hello",@"Welcome", @"search"]];
userActivity.userInfo = @{@"id":@"com.example.state"};
userActivity.eligibleForSearch = YES;
[userActivity becomeCurrent];
Ссылка, чтобы сделать мой вопрос более понятным.
Ответы
Ответ 1
От Форумы Apple:
Одна вещь, которая укусила несколько человек (включая меня), состоит в том, что деятельность не должна быть освобождена. Если ваш код работает только с NSUserActivities (т.е. Не используя CoreSpotlight), а затем make убедитесь, что ваши действия не освобождаются немедленно.
В моем case, у меня был код, который выделял NSUA, устанавливая некоторые свойства на нем, вызвав startCurrent, но тогда объект выйдет из объема и освобождения. Если вы делаете это, попробуйте поднять активность в сильное свойство, чтобы увидеть, сможете ли вы увидеть результаты, когда вы поиск.
https://forums.developer.apple.com/message/13640#13640
Ответ 2
Я обнаружил, что перед вызовом -becomeCurrent вам необходимо назначить экземпляр NSUserActivity, который вы создали, для вашего текущего видимого свойства userActivity UIViewControllers. Он исправил это для меня, и элементы сразу появились как для передачи обслуживания на других устройствах, так и в поиске прожектора на том же устройстве.
Ответ 3
У меня была такая же проблема, и я читал на форумах разработчиков, что в семени 1 он работает только на устройстве. Я смог заставить его работать на устройстве.
Возможно, это, как и при передаче обслуживания, будет работать только на устройстве.
Ответ 4
Я не мог заставить его работать с бета-версией 2.
Используя CSSearchableItemAttributeSet
с
CSSearchableItemAttributeSet* attributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString*)kUTTypeImage];
attributeSet.title = myobject.title;
attributeSet.keywords = [myobject.desc componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
attributeSet.contentDescription = myobject.desc;
if (myobject.images.count > 0) {
attributeSet.thumbnailData = myobject.myimagedata;
}
attributeSet.rating = @(myobject.rating.integerValue / 2);
CSSearchableItem* item;
item = [[CSSearchableItem alloc] initWithUniqueIdentifier:@"..." domainIdentifier:@"..." attributeSet:attributeSet];
[[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:@[item] completionHandler: ^(NSError * __nullable error) {
NSLog(@"Search item indexed");
}];
работает, хотя и с изображениями.
То, что я не мог найти, - это рейтинг, который можно найти где угодно.