指示无效的 NSUserActivity
NSUserActivity for directions not working
我在使用我的应用程序中的 mapItem 实现 NSUserActivity 时遇到了一些问题。
我想要的只是能够在应用程序切换器中使用 "Get Directions" 建议,就像 Foursquare 那样:
我在 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
我还将我的 activity 类型添加到 NSUserActivityTypes
,尽管我认为这只是启动我的应用程序和接收 activity 对象所必需的,这不是什么我现在很担心。
已解决:根据下面@raidfive 的正确答案,activity
现在是一个 class 属性,具有很强的参考:
@property (strong) NSUserActivity *activity;
...
[_activity becomeCurrent];
我不确定这是否适用于 mapItem
类型,但文档提到:
Your app must maintain a strong reference to any activity objects that you use for search results.
因此,您可能需要将 activity
存储为 class 级别变量。
我在使用我的应用程序中的 mapItem 实现 NSUserActivity 时遇到了一些问题。
我想要的只是能够在应用程序切换器中使用 "Get Directions" 建议,就像 Foursquare 那样:
我在 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
我还将我的 activity 类型添加到 NSUserActivityTypes
,尽管我认为这只是启动我的应用程序和接收 activity 对象所必需的,这不是什么我现在很担心。
已解决:根据下面@raidfive 的正确答案,activity
现在是一个 class 属性,具有很强的参考:
@property (strong) NSUserActivity *activity;
...
[_activity becomeCurrent];
我不确定这是否适用于 mapItem
类型,但文档提到:
Your app must maintain a strong reference to any activity objects that you use for search results.
因此,您可能需要将 activity
存储为 class 级别变量。