1

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

到现在为止还挺好。但是,如果我还希望能够从 NSManagedObjec 的 status 属性中获取一个简单的 int,以便我可以将其与代码中的枚举进行 AND 操作,该怎么办?也就是说,我会撒谎以涵盖 3 种情况:

  1. myManagedObject.status = [JSONResponse valueForKey:@"status"](应该使用转换器来做 NSString -> NSNumber)
  2. [JSONforUpload setValue:myManagedObject.status forKey:@"status"](应该使用transformer来做NSNumber->NSString)
  3. 从代码中的其他地方,任何类似于以下内容的内容:if(myManagedObject.status & statusInProgress) ...其中 statusInProgress 是一个枚举。

我想我可以暂时禁用值转换器,但是我不知道 NSManagedObject 是否有对它的引用,或者我是否应该从 NSValueTransformer 类中禁用它,这显然保留了一个已注册的转换器表?

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

有任何想法吗?

4

3 回答 3

0

为什么不为 JSON 转换编写两个额外的方法并将属性保留为整数?那么你将拥有两全其美的东西。

于 2013-04-05T08:13:53.977 回答
0

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

于 2013-04-07T11:19:00.893 回答
0

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

于 2013-04-07T14:21:40.463 回答