Сделать действия и состояния приложений доступными для поиска с помощью 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];

Ссылкачтобы мой вопрос был более понятен.


person Ayush    schedule 15.06.2015    source источник
comment
Вы пробовали это и после интеграции с Core Spotlight API?   -  person Nilesh Patel    schedule 15.06.2015
comment
Да, я добавил CoreSpotLight и MobileCoreServices.   -  person Ayush    schedule 15.06.2015
comment
Хорошо. Итак, вы внедрили все необходимые основные методы прожектора? Я знаю, что это не обязательно, но Apple рекомендует работать с NSUserActivity.   -  person Nilesh Patel    schedule 16.06.2015
comment
@Ayush, ты разобрался?   -  person manonthemoon    schedule 17.06.2015
comment
Вы исправили это? такая же проблема и здесь   -  person christijk    schedule 03.07.2015


Ответы (4)


На форумах Apple:

Одна вещь, которая укусила нескольких человек (включая меня), заключается в том, что активность не должна быть освобождена. Если ваш код работает только с NSUserActivities (т. е. не использует дополнительно CoreSpotlight), убедитесь убедиться, что ваши действия не освобождаются немедленно.
В моем случае я был код, который выделял NSUA, устанавливал для него некоторые свойства, вызывал становлениеCurrent, но затем объект выходил из области видимости и освобождался. Если вы делаете это, попробуйте добавить активность в сильное свойство, чтобы увидеть, сможете ли вы увидеть результаты при поиске.

https://forums.developer.apple.com/message/13640#13640

person L A    schedule 18.07.2015
comment
Это имеет смысл. Для тех из вас, кто создал класс только для индексации материала CoreSpotlight и UserActivity, я решил проблему, создав статический NSMutableArray * activityArray = nil; инициализируя его в +(void)initialize как пустой изменяемый массив, а затем добавляя к нему действия. Это может быть немного излишним, но пока это работает, и я сделаю это лучше позже. - person Uzaak; 09.09.2015

Что я обнаружил, так это то, что вы должны назначить экземпляр NSUserActivity, который вы создали, для вашего текущего видимого свойства userActivity UIViewControllers перед вызовом -becomeCurrent. Это исправило это для меня, и элементы сразу появились как для передачи на другие устройства, так и для поиска в центре внимания на том же устройстве.

person Zoltán Lippai    schedule 18.06.2015

У меня была такая же проблема, и я читал на форумах разработчиков, что в seed 1 это работает только на устройстве. Я смог заставить его работать на устройстве.

Может быть, это, как и в случае с передачей, будет работать только на устройстве, к сожалению.

person Omar Abdelhafith    schedule 19.06.2015
comment
Я не смог заставить эту работу работать, обходным путем было бы связать CSSearchItem с активностью - person Omar Abdelhafith; 06.07.2015

Я тоже не смог заставить его работать с бета 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");
}];

работает, однако, даже с изображениями. Чего я не мог заставить работать, так это рейтинга, чтобы появляться где угодно.

person k1th    schedule 06.07.2015