2013-04-05 52 views
1

具体来说,假设我有一个NSManagedObject,其中的“statusCode”属性设置为可变形,并且有一个可逆值变换器子类可以从NSStrings转换为NSNumbers,反之亦然。我们的想法是使用值转换器,以便接收JSON,并且JSON中的“状态”键中的字符串自动映射到表示NSManagedObject中的状态码的NSNumber。相反,如果我要将NSManagedObject上传到服务器,那么它的状态属性将从NSNumber转换为JSON的字符串。是否可以有条件地禁用NSManagedObject属性的NSValueTransformer?

到目前为止这么好。但是,如果我也希望能够从NSManagedObjec的状态属性中获得一个简单的int值,那么我可以在代码中使用enums来进行AND操作呢? 也就是说,我说谎覆盖三种情况:

  1. myManagedObject.status = [JSONResponse valueForKey:@"status"](应该使用变压器做的NSString - > NSNumber的)
  2. [JSONforUpload setValue:myManagedObject.status forKey:@"status"](应该使用变压器做NSNumber->的NSString)
  3. 从在代码的其他地方,任何沿着以下方向的东西:if(myManagedObject.status & statusInProgress) ...其中statusInProgress是一个枚举。

我在想我可以暂时禁用值转换器,但我不知道如果NSManagedObject有一个引用它,或者如果我应该禁用NSValueTransformer类,它显然保留一张表的注册变压器?

我知道,对于第三种情况,我可以只做[myManagedObject.status intValue],然后进行按位比较,但我想知道是否有任何方法可以让intValue]自动从该对象的用户角度返回。

任何想法?

回答

0

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

0

为什么不为JSON转换编写两个附加方法并将该属性保留为整数?那么你会从两个世界获得最好的。

+0

这是我的第一种方法,是的,它的工作原理。如果不是,我可能会回到那个。但我想知道是否有办法将它关闭并保留可转换的属性。 – SaldaVonSchwartz 2013-04-05 08:15:42

0

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

相关问题