2016-09-15 53 views
1

我正在用Xcode 8中的Swift 3.0编写测试程序。问题是,当我尝试从NSManagedObject接收任何数据时,像这样:Swift 3类型'Any'的值没有成员'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 { 

标有错误

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

所以问题是如何从中获取键入任何单个记录数据? P.S.如果可能的话,没有铸造AnyObject类型,因为它是导致该

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

其中也有一个错误:

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

而且我想这样做的正确方法。 谢谢!

UPDATE

我找到了解决方案(感谢Vadian),但我怀疑这是正确的:

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

类型'任何'没有下标成员 – Alex

+0

在哪里做到这一点?获取(请求)为[String:AnyObject] – Alex

回答

3

fetch返回[Any]。您需要将类型转换为实际类型,在此例中为[NSManagedObject]

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

因为根据被迫向下转换是安全的获取要求它保证了返回类型为NSManagedObject

相关问题