为NSManagedObject属性有条件地禁用NSValueTransformer是否可行?

时间:2013-04-05 08:09:10

标签: ios cocoa core-data nsvaluetransformer

具体来说,假设我有一个带有" statusCode"的NSManagedObject。属性设置为可转换,可逆值变换器子类从NSStrings转换为NSNumbers,反之亦然。我的想法是使用值变换器,以便从状态"接收JSON和字符串。 JSON中的键自动映射到NSNumber,NSNumber表示NSManagedObject中的状态代码。相反,如果我要将NSManagedObject上传到服务器,那么它的status属性将从NSNumber转换为JSON的字符串。

到目前为止一切顺利。但是,如果我还希望能够从NSManagedObjec的状态属性中获取一个简单的int,那么我可以将它与代码中的枚举一起使用? 也就是说,我会骗到3个案例:

  1. myManagedObject.status = [JSONResponse valueForKey:@"status"](应该使用变换器来执行NSString - > NSNumber)
  2. [JSONforUpload setValue:myManagedObject.status forKey:@"status"](应该使用变换器来执行NSNumber-> NSString)
  3. 从代码的其他地方开始,其中包括:if(myManagedObject.status & statusInProgress) ...,其中statusInProgress是枚举。
  4. 我想我可以暂时禁用值转换器,但是我不知道NSManagedObject是否有对它的引用,或者我是否应该从NSValueTransformer类中禁用它,这显然保留了一个已注册的变换器表?

    我知道,对于第三种情况,我可以[myManagedObject.status intValue]然后进行按位比较,但我想知道是否有任何方式我可以拥有intValue]从这个对象的角度来看,自动返回。

    有什么想法吗?

3 个答案:

答案 0 :(得分:0)

为什么不为JSON转换编写另外两个方法并将属性保留为整数?那么你将拥有两个世界中最好的。

答案 1 :(得分:0)

一种方法是向变换器添加属性,以便在字符串和枚举反转值之间切换。虽然我最终做了一个enum< - >字符串转换器并且没有在可转换属性上使用它(而是将托管对象的属性保留为int),而是仅为JSON< - >实例化它。对象转换。之后,在整个代码中我只是按原样使用int属性。

答案 2 :(得分:0)

假设此实体具有自己的不同托管对象子类,您还可以简单地向该类添加另一对访问器方法,以封装NSNumberint值之间的转换。 (或者添加一个瞬态属性,如果它需要成为模型的一部分。但是你仍然需要编写自定义访问器来同步这些值。)