3

Hyperosloの迅速な 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

の最初のパラメータは、ここで指定されているAnyObjectchanges()の暗黙的にアンラップされた配列である必要があります。

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 に答える