3

我正在使用Hyperoslo 的 swift lib "Sync"将 JSON 用户转换为 Core Data 对象。

let user = JSON.valueForKey("user")
Sync.changes(user , inEntityNamed: "User", dataStack: DataManager.manager, completion: { (response ) -> Void in
    print("USER \(response)")
})

但是当用我的 JSON 对象设置这个方法的第一个参数时,我有预编译器错误:

无法转换“AnyObject”类型的值?到预期的参数类型'[AnyObject]!'

如果将我的第一行替换为...

let user = JSON.valueForKey("user") as! [AnyObject] 

...应用程序崩溃并出现此错误:

无法将“__NSCFDictionary”(0x3884d7c8)类型的值转换为“NSArray”(0x3884d548)。

如何处理?

感谢@Eric.D 的解释,解决

let user = [JSON.valueForKey("user")!]
4

2 回答 2

3

for 的第一个参数changes()应该是此处指定的 AnyObject 的隐式展开数组:

https://github.com/hyperoslo/Sync#swift

但是您的对象user是可选的 AnyObject。

解决方案:安全解包user,然后将其放入[AnyObject]数组中,然后在changes().

于 2015-10-28T15:42:57.520 回答
1

首先,user 是一个可选的 AnyObject。你永远不能期望你可以在需要任何非可选的地方使用可选的。通常,您将使用“if let”来检查可选项是否存在。

但真的,你想在你的数据库中放一个 AnyObject 吗?这是自找麻烦。首先检查它是否具有正确的类型。

于 2015-10-28T15:39:42.550 回答