核心数据类和获取请求问题
Posted
技术标签:
【中文标题】核心数据类和获取请求问题【英文标题】:Core Data class and fetch request issue 【发布时间】:2015-12-29 17:52:38 【问题描述】:我对使用 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 模型中创建,名称和类等于 DB_PlayerData
,并且模块设置为项目名称。我已经尝试了这里描述的所有类型的设置选项,但都没有成功。
有什么线索吗?
【问题讨论】:
请注意,每个变量名都以小写字母开头,每个单词之后以大写字母开头是很好的做法。例如,不是ResultatRecherche
,而是resultatRecherche
。这称为 lowerCamelCase。
【参考方案1】:
你还没有告诉编译器你的数组中包含了哪种类型。
var ResultatRecherche: [DB_PlayerData] = []
而不是
var ResultatRecherche: NSArray = []
我建议您始终尝试使用正确的 swift 类型,而不是 NSArray 等基础类型。如果您绝对必须使用NSArray
,则需要在尝试访问属性之前将ResultatRecherche[0]
转换为正确的类型,否则它将具有AnyObject 的类型。
【讨论】:
当我输入try! ResultatRecherche = ManagedObjectContext?.executeFetchRequest(SelectAll) as! [DB_PlayerData]
时,我指出了数组的类型,并且在访问属性之前我会这样做。还是我错过了什么?
尽管如此,ResultatRecherche
仍然是它的超类 NSArray 的一种类型,编译器并不知道它实际包含什么。
您的解决方案确实有效。谢谢,即使我仍然不明白它的逻辑。以上是关于核心数据类和获取请求问题的主要内容,如果未能解决你的问题,请参考以下文章