1

「Map」というエンティティを定義しました。次の 3 つの属性があります。

scale : NSFormatter を使用した NSNumber (NSString の代わりに NSNumber が必要な場合は必須)。

units : NSString

mapData : バイナリ データ ? 変換値 ?

この mapData 属性が問題を引き起こします。いくつかの参照を NSMutableArray に格納するカスタム NSView (「マトリックス」プロパティ) があります。これは、mapData 属性に入れたい配列です。しかし、これは機能しません:

[[[mapController arrangedObjects]lastObject] setValue:[matrix colorReference]forKey:@"mapData"];

これ以外はすべて無視します: "lastObject": は (単一の) Map エンティティです。[matrix colorReference] は (プロパティ) NSMutableArray です。

簡単にするために、NSMutableArray を Map エンティティの「mapData」属性にして、ドキュメントの保存時に保存し、後で取得してカスタム ビューに転送するようにします。設計は明確ですが、それを行う方法ははるかに少なく…</p>

お願い助けて。

4

2 に答える 2

2

基本的に型であるBinary Data型の属性にすることで、Core Dataにシリアライズして配列して格納することができますNSData *

次に、 を使用して配列を NSData にシリアル化しますNSKeyedArchiver

NSData *myData = [NSKeyedArchiver archivedDataWithRootObject:myArray];

次を使用して NSArray に戻りますNSKeyedUnarchiver

NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:myData];
于 2012-07-05T11:19:11.557 に答える
1

実際、それはさらに単純です。

Core Dataは、NSMutableArrayを「Transformable」タイプの属性にシリアル化します。もちろん、変換は元に戻すことができるので、次のように直接使用して、カスタムビューのプロパティを設定できます。

[matrix setColorReference:[[mapController content]valueForKey:@"mapData"]];

ここで、「matrix」はNSView、「colorReference」はそのNSMutableArrayプロパティ、「mapcontroller」はキー「mapData」でNSDataを格納するエンティティです。

逆の操作(ファイルに保存するために編集されたマップ)の場合、次のようにします。

[[mapController content] setValue:colorReference forKey:@"mapData"];

コアデータの属性はKVOに準拠しているため、ファイルは編集済みとしてマークされ、もちろん元に戻すことができます。

オブジェクト間の参照を維持するために(コントローラー->ビューとリバース)、サブクラスでIBOutletプロパティを使用し、IBでバインディングを作成し、残りをフレームワークに任せます(私よりも優れています)。

ありがとう!

于 2012-07-07T12:44:57.137 に答える