2016-09-15 24 views
1

Xcode 8でSwift 3.0を使用してCore Dataのテストプログラムを作成しています。このようにNSManagedObjectからデータを受け取ろうとしたときに問題が発生します:Swift 3タイプ 'Any'のメンバーに 'valueForKey'というメンバーがありません

エラー

Value of type 'Any' has no member 'valueForKey'

が付い

let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Entity") 
request.returnsObjectsAsFaults = false 
do { 
    let entityTableInCoreData = try newPrivateQueueContext.fetch(request) 
    for i in entityTableInCoreData { 
     if let a = i.valueForKey("b") as? String { 
      print(a) 
     } 
    } 
} catch { 
} 

ライン

if let a = i.valueForKey("b") as? String { 

そこで質問から取得する方法ですtype任意のレコードデータ? P.P.それはANYOBJECT型にキャストすることなく、可能であるならば、それはまた、エラーが発生しました。この

if let a = (i as AnyObject).value("b") as? String { 

につながっているので:

Cannot invoke 'value' with an argument list of type '(String)'

そして、私は適切な方法でそれをやってみたいです。 ありがとうございました!

UPDATEは、私は解決策(ヴァディアンのおかげで)見つけましたが、私はそれが正しいものである疑い:私はまだこれを行うための正しい方法を探しています

do { 
    let entityTableInCoreData = try newPrivateQueueContext.fetch(request) 
    for i in entityTableInCoreData { 
     print("Record") 
     //print(i) 
     if let a = i as? NSManagedObject { 
      print("a: \(a.value(forKey: "a"))") 
     } 
    } 

} catch { 
} 

+0

いいえ、それはまたエラーです: – Alex

+0

タイプ 'Any'には添え字メンバーがありません – Alex

+0

これはどこですか? fetch(request)as [String:AnyObject] – Alex

答えて

3

fetchは、[Any]を返します。タイプを実際のタイプ(この場合は[NSManagedObject])にダウンキャストする必要があります。

let entityTableInCoreData = try newPrivateQueueContext.fetch(request) as! [NSManagedObject] 

強制ダウンキャストは、戻り値の型がNSManagedObjectであることを保証していますフェッチ要求に応じているので安全です。

関連する問題