2017-01-07 3 views
1

Ich habe Probleme beim Implementieren einer NSUserActivity mit einem MapItem aus meiner App.NSUserActivity für Richtungen funktioniert nicht

Alles, was ich möchte in der Lage sein in der App-Switcher die „Route berechnen“ Vorschlag zu verwenden, wie Foursquare tut:

enter image description here

Ich bin in meinem viewDidLoad Methode den folgenden Code verwenden, in der View-Controller, der den Standort (eine Kneipe) anzeigt, die ich registrieren möchte.

NSUserActivity *activity = [[NSUserActivity alloc] initWithActivityType:@"co.pubmapper.ViewPub"]; 

CLLocationCoordinate2D coords = CLLocationCoordinate2DMake(self.pub.lat, self.pub.lng); 
MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:coords]; 
MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark]; 
[mapItem setName:self.pub.name]; 
activity.mapItem = mapItem; 

// not sure any of these are necessary for my use case 
[activity setEligibleForSearch:YES]; 
[activity setEligibleForHandoff:YES]; 
[activity setEligibleForPublicIndexing:YES]; 

[activity becomeCurrent]; 

Wenn dies läuft ich folgend in der Konsole sehen:

[main] sendUserActivityToServer, called on activity C626E4B1-ADF8-49D8-80FB-C773DB71243D after it had been invalidated, so doing nothing. 

Welche mein activity Artikel legt nahe, aus irgendeinem Grunde sofort für ungültig erklärt werden. Ich fügte das folgende hinzu, um die expirationDate einzustellen, aber immer noch die gleiche Nachricht in der Konsole.

activity.expirationDate = [NSDate distantFuture]; 

Soweit ich ich habe

https://developer.apple.com/reference/foundation/nsuseractivity?language=objc hier in der Dokumentation gefolgt alles erzählen kann

Ich habe auch meine Tätigkeit Typ NSUserActivityTypes hinzugefügt, obwohl ich denke, das ist für den Start meiner App nur unbedingt erforderlich ist, und ein Aktivitätsobjekt erhalten, um das es mich gerade nicht geht.

GELöST: basierend auf richtige Antwort von @raidfive unten, activity ist jetzt ein Klasse-Hotel mit einem starken Bezug:

@property (strong) NSUserActivity *activity; 
... 
[_activity becomeCurrent]; 

Antwort

2

Ich bin nicht sicher, ob dies mapItem Typen gilt, aber die docs erwähnen:

Ihre App muss einen starken Verweis auf Aktivitätsobjekte enthalten, die Sie für Suchergebnisse verwenden.

Vielleicht müssen Sie also activity als Klassenvariable speichern.

+0

BINGO! Danke vielmals. Ich hatte das irgendwann gelesen, aber wahrscheinlich nur als relevant für volle Spotlight-Suchergebnisse abgetan. Es scheint, dass es auch für diesen Anwendungsfall benötigt wird. Prost! –

+0

Super! Froh zu hören. – raidfive

Verwandte Themen