1

変換可能な型を試し、パスを次のように保存しました。

myEntityObj.mypah=(__bridge id)(anyPath);

t しかし、私が呼び出すとCGPathRef path=[allEntities objectAtIndex:n] mypath]、このパスは正しくありません (CGPath クラス メソッドなどには応答しないでください)。私に何ができる?

4

1 に答える 1

5

CGPathここで使用するのは少し難しいです。

  • Core Data が認識するタイプではないため、Core Data に直接保存することはできません。
  • Core Data が認識するタイプ (例: ) に変換するための API は提供しませんNSData

CGPathRef何らかの方法で、 (またはそのコンポーネント) を Core Data が認識する型に変換する必要がありますNSData。カスタム値トランスフォーマー (参照) でこれを行うのが最も便利ですNSValueTransformer。しかし、重要なのは、データを変換する方法を理解することです。

いくつかの可能性があります。

  1. パスを保存しないでください。パスの作成に使用したデータを保存してください。NSValueたとえば、インスタンスを との間で変換するための API を提供しますCGPoint。に準拠NSValueしていNSCodingます。これにより、個々のポイントを に変換NSDataでき、Core Data でそれを保存できます。データを読み取るときは、プロセスを逆にして再構築しCGPathRefます。

  2. UIBezierPathあなたの便利なコンテナとして使用してくださいCGPathRef。を で初期化UIBezierPathし、からCGPathRefを取得できます。に準拠しているため、上記のように に変換して Core Data に保存できます。CGPathRefUIBezierPathUIBezierPathNSCodingNSData

于 2013-08-05T21:45:03.027 に答える