2015-06-15 9 views
11

seguito è il codice che sto cercando di attuare per rendere le attività delle applicazioni e afferma ricercabile, ma non in grado di mostrare su iOS ricercaFai App Attività e Stati ricercabile utilizzando NSUserActivity

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 per rendere la mia domanda più chiaro.

+0

Hai provato dopo integraton Nucleo Spotlight API così? –

+0

Yup Ho aggiunto CoreSpotLight e MobileCoreServices – Ayush

+0

Ok. Quindi hai implementato tutto il necessario metodo core spotlight? So che non è necessario, ma Apple consiglia di lavorare con NSUserActivity. –

risposta

6

Quello che ho trovato è che devi assegnare l'istanza NSUserActivity che hai creato alla proprietà userActivity di UIViewControllers attualmente visibile prima di chiamare -becomeCurrent. Lo ha risolto per me e gli articoli sono apparsi immediatamente sia per il trasferimento su altri dispositivi sia per la ricerca spotlight sullo stesso dispositivo.

0

Ho riscontrato lo stesso problema e ho letto sui forum di sviluppo che nel seed 1 funziona solo sul dispositivo. Sono stato in grado di farlo funzionare sul dispositivo.

Potrebbe essere che questo, come con handoff, funziona solo sul dispositivo purtroppo.

+0

ho provato nel dispositivo ... non funziona ... tutti i workarounds? – christijk

+0

Non ero in grado di farlo funzionare, una soluzione alternativa sarebbe associare un CSSearchItem all'attività –

-2

Non ho potuto farlo funzionare anche con la beta 2. Utilizzando un CSSearchableItemAttributeSet con

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

opere, però, anche con le immagini. Quello che non riuscivo a far funzionare era la valutazione da mostrare ovunque.

20

Dai forum di Apple:

Una cosa che ha morso un paio di persone (me compreso) è che l'attività non deve essere deallocato. Se il tuo codice funziona solo con NSUserActivities (vale a dire non utilizzando CoreSpotlight in aggiunta), quindi rendere sicuro che le attività non vengano rilasciate immediatamente.
Nel mio caso , avevo il codice che stava allocando il NSUA, impostando alcune proprietà su di esso, chiamando diventaCorrente, ma poi l'oggetto sarebbe uscito dallo scope e deallocato. Se stai facendo questo, prova a lanciare l'attività in una proprietà forte per vedere se è possibile vedere i risultati quando si ricerca .

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

+0

Y R giusto, funziona per me, thx. È un po 'cablato ... – Joey

+0

Questo ha assolutamente senso. Per quelli di voi che hanno creato una classe solo per l'indicizzazione di roba CoreSpotlight e UserActivity, ciò che ho fatto per risolvere il problema è la creazione di un NSMutableArray * activityArray = nil statico; inizializzandolo in + (void) inizializza come una matrice mutabile vuota e aggiungendovi le attività. Questo potrebbe essere un po 'eccessivo, ma sta funzionando finora e lo renderò migliore in seguito. – Uzaak

Problemi correlati