3

アプリから mapItem を使用して NSUserActivity を実装する際に問題が発生しています。

私が望むのは、Foursquare のように、アプリ スイッチャーで「道順を取得」の提案を使用できるようにすることだけです。

ここに画像の説明を入力

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

これを実行すると、コンソールに次のように表示されます。

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

1 に答える 1

8

これが型に当てはまるかどうかはわかりませんmapItemが、ドキュメントには次のように記載されています。

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

activityそのため、クラス レベルの変数として格納する必要があるかもしれません。

于 2017-01-07T18:19:10.270 に答える