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はオブジェクトなので、「このアーカイバは構造体をエンコードできません」と表示されるのはなぜですか