【问题标题】:Is it posible to conditionally disable NSValueTransformer for NSManagedObject attribute?是否可以有条件地禁用 NSManagedObject 属性的 NSValueTransformer?
【发布时间】:2013-04-05 08:09:09
【问题描述】:

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

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

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

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

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

有什么想法吗?

【问题讨论】:

    标签: ios cocoa core-data nsvaluetransformer


    【解决方案1】:

    为什么不为 JSON 转换编写两个额外的方法并将属性保留为整数?这样你就可以两全其美了。

    【讨论】:

    • 这是我的第一个方法,是的,它有效。如果不是,我可能会回到那个状态。但我想知道是否有办法将其拉下来并保留可变形属性。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2019-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-14
        相关资源
        最近更新 更多