3

MKPolyline私の iOS アプリケーションは、 の中にを格納する必要がありNSUserDefaultます。私は多くの研究を行ってきましたが、今では次のことを知っています。

  • NSUserDefaults は NSCoder のサブクラスです
  • MKPolyline は NSCoder のサブクラスではありません

に保存するのはかなり困難です。MKPolyline を NSData に変換しようとしました:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:routeLine]; // routeLine is an MKPolyline
[defaults dataForKey:@"key"];
[defaults synchronize];

ポリラインを NSData に変換しようとすると、次のエラー メッセージが表示されます。

キャッチされない例外 'NSInvalidArgumentException' によるアプリの終了、理由: '-[MKPolyline encodeWithCoder:]: 認識されないセレクターがインスタンス 0xba1fd70 に送信されました

MKPolylineViewを使用すると上記のコードを正常に実行できますが、MKPolyline をビューから戻す際に問題が発生します。SO でこの Q/Aを見つけましたが、アプリの機能が変わるため、問題は解決しません。

MKPolyline を保存するにはどうすればよいですか? サブクラス化できますか? もしそうなら、それは何を伴いますか? または、MKPolylineView でそれを行う方法はありますか? NSCoder で何か不足していますか?

4

1 に答える 1

4

NSCodingを自分で実装し、表現をMKPolyline構築してに格納することもできますが、直接処理できる配列と辞書を使用して を表現する方がよい場合があります。NSDataNSUserDefaultsMKPolylineNSUserDefaults

各ポイントの x 値と y 値をカプセル化する辞書の配列を作成しNSUserDefaultsMKPolyline.

デフォルトをロードするときは、配列を取得し、辞書をループしてポイントを再構築してから、MKPolyline.

于 2013-02-18T00:54:51.247 に答える