删除Core Data中的第一个对象(Swift)

时间:2015-05-12 19:52:53

标签: ios swift core-data

我正在请求Core Data根据contentid按升序返回其实体条目:

let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext!

let sort = NSSortDescriptor(key:"contentid", ascending:true)
fetchRequest.sortDescriptors = [sort]

let fetchedResults = managedObjectContent.executeFetchRequest(fetchRequest, error: &error) as! [NSManagedObject]

如何删除Core Data&#39返回的升序条目中的第一个对象?

我还尝试通过指定获取单个对象:

fetchRequest.fetchLimit = 1

认为这将返回[NSManagedObject],我试图执行:

managedObjectContext.deleteObject(fetchedResults)

但它抛出了错误:cannot invoke method deleteObject with type '([NSManagedObject])'。我究竟做错了什么?我是否需要将[NSManagedObject]转换为NSManagedObject

3 个答案:

答案 0 :(得分:2)

试试这个:

let fetchedResults = context.executeFetchRequest(fetchRequest, error: nil)
if let result = fetchedResults?.first as? NSManagedObject {
    context.deleteObject(result)
}

executeFetchRequest返回[AnyObject]?,因此您必须打开它,取出第一个对象并将其强制转换为NSManagedObject。之后,您将能够使用此对象执行删除。

答案 1 :(得分:1)

尝试使用managedObjectContext.deleteObject(fetchedResults[0]) ,首先检查fetchedResults [0]是否存在。 您也可以使用:managedObjectContext.deleteObject(fetchedResults.first)

答案 2 :(得分:0)

从返回的数组中检索第一个对象,然后使用deleteObject:

您可以在Apple Documentation

上找到很多有用的信息

- 编辑 -

来自Apple Doc

  

func executeFetchRequest(_ request:NSFetchRequest,                      错误错误:NSErrorPointer) - > [AnyObject]

     

返回值

     

符合指定条件的对象数组   请求从接收方和持久性存储中获取   与接收者的持久性商店协调员相关联。如果   发生错误,返回nil。如果没有对象符合指定的条件   按请求,返回一个空数组。

请注意,executeFetchRequest的返回值是一个数组,而不是NSManagedObject