2015-06-15 4 views
11

Es folgt der Code, den ich zu implementieren versuchen App-Aktivitäten zu machen und Staaten durchsucht, aber nicht in der Lage auf iOS Suche zeigtMachen App-Aktivitäten und Staaten durchsuchbare von NSUserActivity mit

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]; 

Link auf meine Frage mehr zu machen klar.

+0

Haben Sie es nach integraton Core-Spotlight-API als auch versucht? –

+0

Yup Ich habe CoreSpotLight und MobileCoreServices hinzugefügt – Ayush

+0

Okay. Sie haben also alle erforderlichen Core-Spotlight-Methoden implementiert? Ich weiß, dass es nicht erforderlich ist, aber Apple empfiehlt es mit NSUserActivity zu arbeiten. –

Antwort

6

Was ich gefunden habe, ist, dass Sie die NSUserActivity-Instanz, die Sie erstellt haben, zuweisen, um die derzeit sichtbare UIViewControllers userActivity-Eigenschaft vor dem Aufruf von -becomedCurrent. Es hat es für mich repariert und die Artikel erschienen sofort sowohl für die Übergabe auf anderen Geräten als auch in der Spotlight-Suche auf dem gleichen Gerät.

0

Ich hatte das gleiche Problem, und ich las in den Dev-Foren, dass in Seed 1 es nur auf dem Gerät funktioniert. Ich konnte es auf dem Gerät arbeiten lassen.

Es kann sein, dass dies, wie bei der Übergabe, nur auf dem Gerät leider funktioniert.

+0

Ich testete in Gerät..nicht funktioniert..irgendwie Workarounds? – christijk

+0

Ich konnte dies nicht funktionieren, eine Abhilfe wäre, ein CSEearchItem mit der Aktivität zu verknüpfen –

-2

Ich konnte es auch nicht mit Beta 2 arbeiten. Unter Verwendung eines CSSearchableItemAttributeSet mit

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"); 
}]; 

Werke, aber auch mit Bildern. Was ich nicht zur Arbeit bekommen konnte, war die Bewertung, irgendwo aufzutreten.

20

aus dem Apple-Forum:

Eine Sache, die ein paar Leute gebissen hat (mich eingeschlossen) ist, dass die Aktivität darf nicht freigegeben werden. Wenn Ihr Code nur mit NSUserActivities arbeitet (d. H. CoreSpotlight wird nicht zusätzlich verwendet), dann machen SieIhre Aktivitäten werden nicht sofort freigegeben.
In meinem Fall hatte ich Code, der die NSUA zuweist, einige Eigenschaften darauf festlegen, aufrufendCentCurrent, aber dann würde das Objekt aus Bereich gehen und die Zuordnung aufgehoben. Wenn Sie dies tun, versuchen Sie, die Aktivität in eine starke Eigenschaft zu werfen, um zu sehen, ob Sie dann die Ergebnisse sehen können, wenn Sie suchen.

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

+0

Y R richtig, funktioniert für mich, thx. Es ist ein bisschen verkabelt ... – Joey

+0

Das macht total Sinn. Für diejenigen unter Ihnen, die eine Klasse nur für die Indizierung von CoreSpotlight- und UserActivity-Inhalten erstellt haben, habe ich zur Erstellung eines statischen NSMutableArray * activityArray = nil; initialisiere es in + (void) initialisiere es als leeres mutierbares Array und füge dann die Aktivitäten hinzu. Das könnte ein bisschen Overkill sein, aber es funktioniert so weit und ich werde es später besser machen. – Uzaak