2017-01-07 4 views
1

У меня возникли проблемы с внедрением NSUserActivity с mapItem из моего приложения.NSUserActivity для направлений не работает

Все, что я хочу, чтобы иметь возможность использовать «Проложить маршрут» предложение в приложении переключателе, как Foursquare делает:

enter image description here

Я использую следующий код в моем viewDidLoad методе, в контроллер просмотра, который отображает местоположение (паб), который я хочу зарегистрировать.

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

Когда это работает я вижу следующее в консоли:

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

Что наводит на мысль моя activity деталь быть признаны недействительными сразу по какой-то причине. Я добавил следующее, чтобы установить expirationDate, но все равно получаю то же сообщение в консоли.

activity.expirationDate = [NSDate distantFuture]; 

Насколько я могу сказать, я следовал все в документации здесь https://developer.apple.com/reference/foundation/nsuseractivity?language=objc

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

РЕШИТЬ: на основе правильного ответа из @raidfive ниже, activity теперь класса с сильной ссылкой:

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

ответ

2

Я не уверен, если это относится к mapItem типов, но документы упоминают:

Ваше приложение должно содержать ссылку на любые объекты деятельности, которые вы используете для результатов поиска.

Возможно, вам необходимо сохранить activity в качестве переменной уровня.

+0

BINGO! Большое спасибо. Я прочитал это в какой-то момент, но, возможно, отклонен как относящийся только к полным результатам поиска Spotlight. По-видимому, это действительно необходимо для этого случая использования. Ура! –

+0

Удивительный! Рад слышать. – raidfive