NSUserActivity指示不起作用

时间:2017-01-07 18:09:54

标签: ios 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];

1 个答案:

答案 0 :(得分:7)

我不确定这是否适用于mapItem类型,但文档提到:

  

您的应用必须对您用于搜索结果的所有活动对象保持强有力的引用。

因此,您可能需要将activity存储为类级变量。