核心数据类和获取请求问题

时间:2015-12-29 17:52:38

标签: ios xcode swift core-data

我对使用Core Data(XCode 7.1 / Swift 2.0)的错误感到困惑

以下代码运作正常

class DB_PlayerData: NSManagedObject
{
    @NSManaged var playerID: NSNumber
}

class PlayerClass
{
    var IDPlayer: Int = 0
}

func test()
{
    let LocalAppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let ManagedObjectContext = LocalAppDelegate.managedObjectContext
    var SelectAll = NSFetchRequest()
    var ResultatRecherche: NSArray = []
    var gPlayerData = PlayerClass()


    SelectAll = NSFetchRequest(entityName: eNomDBFiles.DB_PlayerData.rawValue)
    try! ResultatRecherche = ManagedObjectContext?.executeFetchRequest(SelectAll) as! [DB_PlayerData]
    if (ResultatRecherche.count == 1)
    {
        gPlayerData.IDPlayer = Int(ResultatRecherche[0].playerID)
    }
    else
    {
        // Do something
    }
}

但是如果函数test与我的项目中的DB_PlayerData类声明不在同一个swift文件中,则会出现以下错误:Value of type 'AnyObject' has no member 'playerID'

实体已在Xcode的数据库模型中创建,名称和类等于DB_PlayerData,模块设置为项目名称。我已经尝试了这里描述的各种设置选项,但没有成功。

有什么线索?

1 个答案:

答案 0 :(得分:1)

你没有告诉编译器你的数组中包含哪种类型。

    var ResultatRecherche: [DB_PlayerData] = []

而不是

    var ResultatRecherche: NSArray = []

我建议你总是尝试使用正确的swift类型而不是像NSArray这样的基础类型。如果您绝对必须使用NSArray,则需要在尝试访问属性之前将ResultatRecherche[0]强制转换为正确的类型,否则它将具有AnyObject类型。