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