Swift:CoreData调用特定对象ID

时间:2016-05-25 15:24:06

标签: ios swift cocoa-touch core-data

我发现新概念作为一个新鲜的开发人员,我一直在努力理解核心数据,并遇到一个我一直在讨论的教程问题。当我使用对象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]()

    }
}

我只是想在堆栈中调用一个特定的名称。

如果需要更多信息,我很乐意提供。

1 个答案:

答案 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对象