2

CLPlacemark オブジェクトを格納しようとしている目印データ属性を持つコア データ エンティティがあります。

@interface ZJPlace : NSManagedObject
...     
@property (nonatomic, retain) NSData * placemark;

私はこのようにオブジェクトをエンコードしています:

place.placemark = [NSKeyedArchiver archivedDataWithRootObject:self.placemark];

そして次のようにデコードします:

self.placemark = [NSKeyedUnarchiver unarchiveObjectWithData:place.placemark];

デコード時に、エラーまたは nil が返されません。空の CLPlacemark オブジェクトのように見えます (self.placemarkのクラスはログに何も出力さCLPlaceMarkdescriptionません)。

place.placemarkコア データ属性にデータが保存されていることがわかりますが、適切なオブジェクトにデコードされていません。これは基本的に、この質問と同じ問題です:回答が得られなかったNSKeyedUnarchiver によるデコードの問題です。

NSKeyedArchiver と CoreData を一緒に使用する方法について、ここで欠けている基本的なものはありますか? ヒントをお寄せいただきありがとうございます...

4

1 に答える 1

1

Durrr... もちろん、Core Data が複雑なオブジェクトを格納する方法について、私が完全に忘れていた基本的なことがありました。これが、私と同じくらい無知な他の初心者に役立つことを願っています. はぁ。

ドキュメント:変換可能な属性

したがって、コアデータでCLPlacemarkをエンコードすることに関する上記の私の質問に対する本当に簡単な解決策は次のとおりです。

  1. Core Data モデルの属性のタイプを に変更Transformable
  2. 私の場合、NSManagedObject サブクラスのヘッダーで、NSManagedObject'sプロパティのタイプを NSData からエンコードしようとしているクラスに変更することを忘れないでください。CLPlacemark

次に、通常のオブジェクトと同じように属性を使用します。

self.placemark = place.placemark

sをいじるNSKeyedArchiver必要はありません。

于 2013-07-29T21:34:47.793 に答える