Core data SWIFT-“AnyObject”没有成员名称“fooBar”

Core data SWIFT-“AnyObject”没有成员名称“fooBar”,core-data,swift,Core Data,Swift,我试图从核心数据中获取一些数据,但遇到了一个小问题。我可以毫无问题地获取数据。当我试图获取一段特定的数据,即data.fooBar时,它会抛出一个错误: “AnyObject”没有成员名称“fooBar” 如果我打印LNDATA,它将显示fooBar确实存在,并且其中存储了数据 我真的不知道它为什么这样做。我试图寻找一个答案,尝试了很多不同的方法,但似乎都不管用。任何帮助都会很好。谢谢 var results : Array<AnyObject> = [] fun

我试图从核心数据中获取一些数据,但遇到了一个小问题。我可以毫无问题地获取数据。当我试图获取一段特定的数据,即data.fooBar时,它会抛出一个错误:

“AnyObject”没有成员名称“fooBar”

如果我打印LNDATA,它将显示fooBar确实存在,并且其中存储了数据

我真的不知道它为什么这样做。我试图寻找一个答案,尝试了很多不同的方法,但似乎都不管用。任何帮助都会很好。谢谢

    var results : Array<AnyObject> = []


    func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {

    //get the data for that storedItem
    var appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    var context:NSManagedObjectContext = appDel.managedObjectContext!
    let req = NSFetchRequest(entityName: "storedItems")

    let name:String = results[indexPath.row].name
    req.predicate = NSPredicate(format: "name == %@", name)
    req.returnsObjectsAsFaults = false

    var tapResults = context.executeFetchRequest(req, error: nil)!

    for item in tapResults {
        println(item) //works, shows all data correctly(including subText)
        println(item.name) //works, the only one that does for some reason???
        println(item.subText) //Error 'AnyObject' does not have a member name 'subText'
    }
更新:基于对vacawama的讨论,回答:谢谢Aaron。关于正确的解决方案,请参阅我接受的答案

我的itemObj类

  @objc(itemObj)
  class itemObj: NSManagedObject {

        @NSManaged var name:String!
        @NSManaged var sliderHours:NSNumber
        @NSManaged var sliderMinutes:NSNumber
        @NSManaged var sliderSeconds:NSNumber
        @NSManaged var subText:String!
        @NSManaged var alarmSound:String!
        @NSManaged var isDefault:NSNumber
    }
我的附件:

    var tResults = (context.executeFetchRequest(req, error: nil))

    for item in tResults as [itemObj!] {

        println(item.name)
        println(item.subText)

    }
executeFetchRequest返回任意对象的可选数组。你不应该强行打开它,这可能会导致崩溃。所以,有选择地打开它并执行可选的强制转换为?要确保类型正确,请执行以下操作:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context:NSManagedObjectContext = appDel.managedObjectContext!
    let req = NSFetchRequest(entityName: "storedItems")

    let name:String = results[indexPath.row].name
    req.predicate = NSPredicate(format: "name == %@", name)
    req.returnsObjectsAsFaults = false

    let tapResults = context.executeFetchRequest(req, error: nil)

    if let presentResults = tapResults {
        if let castedResults = presentResults as? [MyManagedObjectSubclass] {
            for item in castedResults {
                println(item)
                println(item.name)
                println(item.subText)
            }
        }
    }
}
我还将所有变量都更改为let,因为它们不需要是可变的


只要用您的NSManagedObject子类替换MyManagedObject子类即可。

swift是类型安全的,有100多个问题与此完全相同。@Daij Djan感谢您的否决票,正如您在我的问题中所看到的,我一直在搜索一段时间。你能提供一个可以帮助我的链接吗?相关章节中的许多链接都是匹配的。当你要求一个链接时:试试这个:我检查了它,它确实解释了它,或者这个:当你打印这个项目时,它是什么样子的?context.executeFetchResult返回什么?字典数组?@pantless\u coder,以防您更改数据模型中对象的类型或输入错误。将tapResults强制转换到[YourManagedObjectSubclass]将捕获这些错误;你目前的做法不会。我明白了,我会好好看看这里发生了什么。。。非常感谢。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context:NSManagedObjectContext = appDel.managedObjectContext!
    let req = NSFetchRequest(entityName: "storedItems")

    let name:String = results[indexPath.row].name
    req.predicate = NSPredicate(format: "name == %@", name)
    req.returnsObjectsAsFaults = false

    let tapResults = context.executeFetchRequest(req, error: nil)

    if let presentResults = tapResults {
        if let castedResults = presentResults as? [MyManagedObjectSubclass] {
            for item in castedResults {
                println(item)
                println(item.name)
                println(item.subText)
            }
        }
    }
}