Ios 删除核心数据中的项目

Ios 删除核心数据中的项目,ios,swift,core-data,Ios,Swift,Core Data,在调用deleteData()方法之前,我已经验证了我的核心数据中有两个实例。现在我需要删除一个。我引用此项删除我的核心数据 我通过let person=people[0]将第一个NSManagedObject实例复制为!NSManagedObject通过此代码,但应用程序在此行终止managedContext.delete(person) 由于未捕获的异常“NSInvalidArgumentException”,所面临的错误是终止应用程序,原因:'-[NSManagedObjectContex

在调用
deleteData()
方法之前,我已经验证了我的核心数据中有两个实例。现在我需要删除一个。我引用此项删除我的核心数据

我通过
let person=people[0]将第一个
NSManagedObject
实例复制为!NSManagedObject
通过此代码,但应用程序在此行终止
managedContext.delete(person)

由于未捕获的异常“NSInvalidArgumentException”,所面临的错误是
终止应用程序,原因:'-[NSManagedObjectContext delete::]:无法识别的选择器发送到实例0x7FE28092E0'

func deleteData() {
    var people = [Particulars]()
    let fetchRequest = NSFetchRequest(entityName: "Particulars")
    let appDel = UIApplication.sharedApplication().delegate as! AppDelegate
    let managedContext = appDel.managedObjectContext

    do {
        people = try managedContext.executeFetchRequest(fetchRequest) as! [Particulars]
        do {
            let person = people[0] as! NSManagedObject
            managedContext.delete(person)
            try managedContext.save()

            } catch let error as NSError {
                print("Could not delete data \(error)")
                }
    } catch let error as NSError
        {
            print("Could not fetch data \(error)")
        }
}
正确的调用不是
delete
,而是
NSManagedObjectContext
deleteObject

还要注意的是,写
person.first
比写
people[0]
更具可读性,但这当然是一个品味问题

我认为
让person=people[0]作为一个例子!NSManagedObject
有问题,因为

  • 它不安全,如果没有搜索结果就会崩溃。如果让person=people,则使用
    。首先

  • 细节
    NSManagedObject
    的向下转换也没有意义。您在获取搜索结果时已经执行了强制转换


  • 试试
    managedContext.deleteObject(person)
    我是swift新手,所以我遵循了教程的教学方法。谢谢你的消息,我听到了。有些教程错误百出。