2017-01-07 66 views
1

私のアプリからmapItemでNSUserActivityを実装する際に問題があります。NSUserActivityが正しく動作しない

フォースクエアはないように私が欲しいのは、アプリスイッチャーに提案「行き方」を使用することができることです。

enter image description here

私は、私のviewDidLoad方法に次のコードを使用しています登録したい場所(パブ)を表示するView Controller。

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

これは私がコンソールに以下を参照してください動作します。私のactivityアイテムが何らかの理由ですぐに無効にされている示唆

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

。私はexpirationDateを設定するために以下を追加しましたが、コンソールには同じメッセージが表示されます。

activity.expirationDate = [NSDate distantFuture]; 

私の知る限り、私はこれが私のアプリを起動するだけで、厳密には必要だと思うが、私は、私もNSUserActivityTypesに私の活動の種類を追加しましたここのドキュメント内のすべてhttps://developer.apple.com/reference/foundation/nsuseractivity?language=objc

を追ってきた言うことができるように私は現在懸念しているものではない活動オブジェクトを受け取っています。

解決しよう:これはmapItemタイプに適用されますが、ドキュメントが言及している場合、私はわからない

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

答えて

2

:以下@raidfiveから正解をもとに、activityが強い参照を持つクラスのプロパティは以下のようになります。

あなたのアプリは、検索結果に使用するアクティビティオブジェクトを強力に参照する必要があります。

多分activityをクラスレベルの変数として保存する必要があります。

+0

ビンゴ!どうもありがとう。私はある時点でそれを読んでいたが、恐らくSpotlightの完全な検索結果にのみ関連するものとして却下した。実際にはこのユースケースにも必要であるようです。乾杯! –

+0

恐ろしい!聞いてうれしい。 – raidfive