MKMapView
センターとスパンNSKeyedArchiver
を状態保存のためにエンコードしようとしていました。いくつかの便利な新しい MapKit のNSValue
追加valueWithMKCoordinate:
を見つけましたvalueWithMKCoordinate:
。これらをキー付きアーカイバにエンコードしようとして失敗しました:
- (void)encodeRestorableStateWithCoder:(NSCoder *)coder
{
NSValue *mapCenterValue = [NSValue valueWithMKCoordinate:mapView.centerCoordinate];
NSValue *mapSpanValue = [NSValue valueWithMKCoordinateSpan:mapView.region.span];
[coder encodeObject:mapCenterValue forKey:kMapCenter];
[coder encodeObject:mapSpanValue forKey:kMapSpan];
}
キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '-[NSKeyedArchiver encodeValueOfObjCType:at:]: このアーカイバは構造体をエンコードできません'
この問題の解決策は、個々の double を 4 つの個別のキーにエンコードすることであることを理解しています。
私の質問は、なぜこれが起こるのかです。AnNSValue
はオブジェクトなので、「このアーカイバは構造体をエンコードできません」と表示されるのはなぜですか