我发现新概念作为一个新鲜的开发人员,我一直在努力理解核心数据,并遇到一个我一直在讨论的教程问题。当我使用对象ID调用项目时出错。错误是 - 类型'Person.Type'没有下标成员。可能是因为我没有正确地执行此操作或其他原因。我相信有人可以对这个问题有所了解
func getObjectById(id: NSManagedObjectID) -> Person?{
return context.objectWithID(id) as? Person
}
func callFirstObject(){
let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
let personService = PersonService(context: context)
let firstPerson = personService.getObjectById(Person[0].objectID!)
}
从那里我只是在按钮内调用callFirstObject()
。
编辑:我有一个函数来调用我的所有对象
func getAllObjects() -> [Person]{
return getObject(withPredicate: NSPredicate(value: true))
}
以及使用谓词
调用所有对象的函数func getObject(withPredicate queryPredicate: NSPredicate) -> [Person]{
let fetchRequest = NSFetchRequest(entityName: Person.entityName)
fetchRequest.predicate = queryPredicate
do {
let response = try context.executeFetchRequest(fetchRequest)
print("\(response)")
return response as! [Person]
} catch let error as NSError {
// In case of failure
print("There was an error - \(error)")
return [Person]()
}
}
我只是想在堆栈中调用一个特定的名称。
如果需要更多信息,我很乐意提供。
答案 0 :(得分:0)
Person没有下标成员,因为Person是类名。应该在Person对象数组上调用下标[0]
。
看起来像这样:
func callFirstObject(){
let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
let personService = PersonService(context: context)
// Person Array
let persons: [Person] = [person1, person2, person3 ]
let firstPerson = personService.getObjectById(persons[0].objectID!)
}
编辑:我有点混淆逻辑。如果你已经有了这个人,你必须要访问objectID,然后我就不知道为什么你需要再次获取它。我们能否看到围绕这两种方法的更多背景?
通过以下评论回答您的问题:
如果您想获取Person模型的所有记录,您可以执行以下操作:
let appDelegate =
UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "Person")
do {
let results =
try managedContext.executeFetchRequest(fetchRequest)
people = results as! [NSManagedObject]
} catch let error as NSError {
print("Could not fetch \(error)")
}
这将为您提供存储在Core Data中的所有Person对象