2015-05-12 3 views
0

Я запрашивающий основные данные, чтобы вернуть мне свои записи сущностей в порядке возрастания на основе идентификации контента:Удаления первого объекта в Core Data (Swift)

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 вернулся, по возрастанию записи?

Я также пытался получить один объект, указав:

fetchRequest.fetchLimit = 1 

Думая, что это будет возвращать [NSManagedObject], я попытался затем выполнить:

managedObjectContext.deleteObject(fetchedResults) 

Но бросил ошибку не может вызывать метод deleteObject с типом '([NSManagedObject])'. Что я делаю неправильно? Нужно ли конвертировать [NSManagedObject] в NSManagedObject, возможно?

+0

'[NSManagedObject]' это массив, который содержит экземпляры 'NSManagedObject'. Вы не можете вызывать 'deleteObject' в массиве. – Kubba

+0

А я вижу. Так с чем его следует вызывать? – simplexity

+0

см. Мой ответ ниже – Kubba

ответ

2

Попробуйте это:

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

executeFetchRequest возвращает [AnyObject]? так что вы должны разворачивать его, возьмите первый объект и приведение его в NSManagedObject. После этого вы сможете выполнить удаление с помощью этого объекта.

+0

При сохранении я получаю сообщение об ошибке: «CoreData: error: Мутирование управляемого объекта 0x7fecdbcc0390 (0x7fecdbcc00e0) после того, как он был удален из контекст." – simplexity

+0

Похоже, что указанная выше ошибка происходит только после того, как я прошу Core Data вернуть отсортированные данные. В противном случае он берет первый элемент и удаляет его успешно, но мне действительно нужно, чтобы он удалял запись с самой низкой contentid. Поэтому я использую метод sort, но выдает ошибку ... – simplexity

0

Получить первый объект из возвращаемого массива, а затем использовать deleteObject:

Вы можете найти много полезной информации о Apple Documentation

--EDIT--

От компании Apple Doc

func executeFetchRequest(_ request: NSFetchRequest, error error: NSErrorPointer) -> [AnyObject]?

Return Value

An array of objects that meet the criteria specified by request fetched from the receiver and from the persistent stores associated with the receiver’s persistent store coordinator. If an error occurs, returns nil. If no objects match the criteria specified by request, returns an empty array.

Обратите внимание, что возвращаемое значение executeFetchRequest представляет собой массив, а не NSManagedObject

+0

Да, я попытался использовать deleteObject и обновил свой вопрос выше для ясности. – simplexity

+0

@simplexity Я также обновил свой ответ – Leonardo

+0

Часть, с которой я запутался, заключается в том, что fetchedResults возвращается как [NSManagedObject]. Когда передается deleteObject, он говорит, что он не может быть вызван с NSManagedObject, но я думал, что это то, чего он ожидает. Я прошел через документы, но по-прежнему чувствую, что здесь полностью отсутствует что-то ... – simplexity

1

Попробуйте с managedObjectContext.deleteObject(fetchedResults[0]) , сначала проверьте, что выбраныРезультаты [0]. Также вы можете использовать: managedObjectContext.deleteObject(fetchedResults.first)

+0

Спасибо Хавьер. По какой-то причине я все еще получаю ту же консольную ошибку, что и в ответе Куббы. Очень странно. – simplexity

+0

Есть ли способ сделать это после сортировки по возрастанию? – simplexity

Смежные вопросы