一起使用 Realm.io 和 RestKit 时的属性数据类型
Posted
技术标签:
【中文标题】一起使用 Realm.io 和 RestKit 时的属性数据类型【英文标题】:Property data types while using Realm.io and RestKit together 【发布时间】:2014-11-11 01:59:28 【问题描述】:我正在尝试将 RestKit 与 Realm.io 一起使用,但遇到了属性数据类型的问题。我有一个整数属性。 RestKit 似乎只想映射到NSNumber
类型(https://github.com/RestKit/RestKit/wiki/Object-mapping),而领域对象只允许原始属性(Int
、Float
、Double
等(http://realm.io/docs/cocoa/0.87.4/#property-types))。
我看到其他迹象表明这两个框架可以一起使用 (Can i use RestKit and Realm.io),但我不确定如何解决这个问题。
例如,如果我使用NSNumber
数据类型,RLMObject
将失败并给出错误
'RLMException', reason: ''NSNumber' is not supported as an RLMObject property...'
但是,如果我使用原始数据类型来使领域快乐,我会从 RestKit 收到 'key value coding-compliant'
错误。
这是最糟糕的。
我尝试向属性添加一个 RestKit 值转换器,我想也许我可以在需要进行休息调用时在数据类型之间来回切换。但是该策略正在成为其自身的 *** 问题。
实际上是最糟糕的。
有人做过吗?我是否对价值转换器有所了解?提前致谢!
【问题讨论】:
能否请您发布您的 RLMObject 模型?我对带有原始属性的 RestKit 和 Realm 没有任何问题。虽然我在 objc 中,但我刚刚看到你在 Swift 中遇到了这个问题。我下次试试。 【参考方案1】:让 RestKit 在 Swift 中使用原始数字类型没有任何问题。这是我的代码:
class TwitterError: RLMObject
dynamic var message = ""
dynamic var code = 0
override var description: String return "Error \(code): \(message)"
class ViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
let mapping = RKObjectMapping(forClass: TwitterError.self)
mapping.addAttributeMappingsFromDictionary(["message": "message", "code": "code"])
let responseDescriptor = RKResponseDescriptor(mapping: mapping, pathPattern: nil, keyPath: "errors", statusCodes: nil)
let url = NSURL(string: "http://api.twitter.com/1/statuses/public_timeline.json")
let request = NSURLRequest(URL: url!)
let operation = RKObjectRequestOperation(request: request, responseDescriptors: [responseDescriptor])
operation.setCompletionBlockWithSuccess(nil, failure: nil)
operation.start()
输出"Error 92: SSL is required"
的描述,这意味着代码(Int
)和消息(String
)都被正确解析了。
【讨论】:
谢谢@jpsim - 你知道一旦实例化它最终是什么数据类型吗?因为如果我尝试显式声明类型,则会出现错误,但您拥有的代码似乎也适用于我。再次感谢。 代码属性是Int
,在将属性定义为dynamic var code: Int = 0
时仍然有效以上是关于一起使用 Realm.io 和 RestKit 时的属性数据类型的主要内容,如果未能解决你的问题,请参考以下文章
让 RestKit 与 CococaPods 1.x 一起工作