1

今週、CLRegionクラスに新しいプロパティとメソッドを追加してクラスをサブクラス化し、それを監視しようとしました。

@interface MyClass : CLRegion

CLRegionこれを行ったのは、 と追加されたプロパティを別々に保存するよりもずっときれいだとわかったからです。

NSSecureCodingこのサブクラスにandNSCopyingプロトコルを実装して、それを機能させました。startMonitoringForRegion:orを使用してこのサブクラスを監視することはすべてうまくいきましたstopMonitoringForRegion:

しかし、(NSArray *)monitoredRegions:私の問題で既存の領域を取得すると、次のことが発生します。

識別子によって領域をサブクラス化された領域として識別し、それをサブクラス化されたクラス (MyClass *) にキャストして特定のメソッドを呼び出すと、これは機能せず、「CLCircularRegion の不明なセレクター」例外が発生します。

Objective-Cには仮想メソッドなどがないため、オブジェクトがmonitoredRegionsによって構築されたときに息子のinit//initWithCoder//encodeWithCoder//..が呼び出されないため、これが機能しないと強く疑っています。

ご存知のようにNSUserDefaults、地域を特定するときに追加プロパティを保存して取得する必要がありますが、少し汚いと思います...

だから、このようにする方法はありますか?または、NSUserDefaultソリューションを保持する必要がありますか?

4

1 に答える 1

3

いいえ、「ストック」CLRegions を取得します


引用:「このセットのオブジェクトは、登録時に指定したオブジェクトと必ずしも同じであるとは限りません。システムによって維持されるのは地域データ自体のみです。したがって、登録された地域を一意に識別する唯一の方法は、その識別子プロパティを使用することです。」

于 2014-03-14T15:21:26.707 に答える