核心数据的哪种属性选择CGPathRef?

时间:2013-08-05 18:40:39

标签: objective-c core-data attributes

我尝试了可转换类型并保存我的路径:

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

吨 但是当我调用CGPathRef path=[allEntities objectAtIndex:n] mypath]时,这条路径是不正确的(不要回答CGPath类方法等)。 我该怎么办?

1 个答案:

答案 0 :(得分:5)

CGPath在这里使用起来有点难,因为

  • 您无法将其直接保存到Core Data中,因为它不是Core Data识别的类型。
  • 它没有提供任何API来将其转换为核心数据识别的类型(例如NSData)。

您需要将CGPathRef(或其组件)转换为Core Data识别的类型(如NSData)。在自定义值转换器中执行此操作最为方便(查找NSValueTransformer)。但关键是要弄清楚如何转换数据。

您有几种可能性:

  1. 不保存路径,保存用于创建路径的数据。例如,NSValue提供了一个API,用于将实例转换为CGPoint或从NSValue转换实例。 NSCoding符合NSData。这将允许您将单个点转换为CGPathRef,Core Data可以保存它。在读取数据时,请反转该过程以重建UIBezierPath

  2. 使用CGPathRef作为UIBezierPath的便利容器。您可以使用CGPathRef初始化CGPathRef,并从UIBezierPath返回UIBezierPathNSCoding符合NSData,如上所述,它可以转换为{{1}}以保存在核心数据中。