Ios Swift:对特定对象ID的CoreData调用

Ios Swift:对特定对象ID的CoreData调用,ios,swift,cocoa-touch,core-data,Ios,Swift,Cocoa Touch,Core Data,作为一名新的开发人员,我正在发现新的概念,我一直在努力理解核心数据,并在一篇教程中遇到了一个问题。使用对象ID调用项时出错。错误为-Type“Person.Type”没有下标成员。可能是因为我做得不正确,或者其他原因。我相信有人能对这个问题有所了解 这是我编写的一个函数,用于从数据堆栈中获取特定项, 下面是我调用函数的方式 从那里,我只是在一个按钮内调用callFirstObject() 编辑:我有一个函数来调用我的所有对象 func getAllObjects() -> [Person]

作为一名新的开发人员,我正在发现新的概念,我一直在努力理解核心数据,并在一篇教程中遇到了一个问题。使用对象ID调用项时出错。错误为-Type“Person.Type”没有下标成员。可能是因为我做得不正确,或者其他原因。我相信有人能对这个问题有所了解

这是我编写的一个函数,用于从数据堆栈中获取特定项, 下面是我调用函数的方式 从那里,我只是在一个按钮内调用
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,我想能够添加名字,显示我添加到列表中的名字,编辑这些名字,然后从列表中删除它们。