2017-01-07 34 views
1

我遇到了一些麻煩,從我的應用程序用mapItem實現NSUserActivity。NSUserActivity的方向不起作用

所有我想要的是能夠使用「查詢路線」,建議在應用切換器,像四方的作用:

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

賓果!非常感謝。我曾經在某一時間閱讀過這篇文章,但可能會被解讀爲僅與完整的Spotlight搜索結果相關。它似乎也是這個用例所需要的。乾杯! –

+0

太棒了!很高興聽到。 – raidfive