Ios Swift:对特定对象ID的CoreData调用
作为一名新的开发人员,我正在发现新的概念,我一直在努力理解核心数据,并在一篇教程中遇到了一个问题。使用对象ID调用项时出错。错误为-Type“Person.Type”没有下标成员。可能是因为我做得不正确,或者其他原因。我相信有人能对这个问题有所了解 这是我编写的一个函数,用于从数据堆栈中获取特定项, 下面是我调用函数的方式 从那里,我只是在一个按钮内调用Ios Swift:对特定对象ID的CoreData调用,ios,swift,cocoa-touch,core-data,Ios,Swift,Cocoa Touch,Core Data,作为一名新的开发人员,我正在发现新的概念,我一直在努力理解核心数据,并在一篇教程中遇到了一个问题。使用对象ID调用项时出错。错误为-Type“Person.Type”没有下标成员。可能是因为我做得不正确,或者其他原因。我相信有人能对这个问题有所了解 这是我编写的一个函数,用于从数据堆栈中获取特定项, 下面是我调用函数的方式 从那里,我只是在一个按钮内调用callFirstObject() 编辑:我有一个函数来调用我的所有对象 func getAllObjects() -> [Person]
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]()
}
}
我只是尝试调用堆栈中的特定名称
如果需要更多的信息,我很乐意提供 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)")
}
这将为您提供存储在核心数据中的所有Person对象,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)")
}
这将为您提供存储在核心数据中的所有Person对象这是正确的类名,但my.xcdatamodeld中的实体称为Person,是否有某种方法可以将其作为数组调用?或者它不是这样工作的?有没有一种方法可以将数据模型作为一个数组整体调用?或者我必须用一定数量的objects@GabrielMSC见我的编辑上面。该片段将以数组形式检索所有Person对象。@GabrielMSC刚刚看到您进行了编辑。我很清楚,你的最终目标是什么?你到底想实现什么?基本上我只是在搞乱CRUD,我希望能够添加名称,显示我添加到列表中的名称,编辑这些名称,然后从列表中删除它们。你是对的类名,但我的.xcdatamodeld中的实体称为Person,有什么方法可以将其作为数组调用吗?或者它不是这样工作的?有没有一种方法可以将数据模型作为一个数组整体调用?或者我必须用一定数量的objects@GabrielMSC见我的编辑上面。该片段将以数组形式检索所有Person对象。@GabrielMSC刚刚看到您进行了编辑。我很清楚,你的最终目标是什么?你到底想实现什么?基本上我只是在搞乱CRUD,我想能够添加名字,显示我添加到列表中的名字,编辑这些名字,然后从列表中删除它们。