У меня есть пользовательский UITableView
, который заботится о анимации для переупорядочения ячеек и отлично работает со стандартным тестовым массивом, который не использует основные данные.Использование «didMoveCellFromIndexPathToIndexPathBlock» с основными данными
При попытке приложения, которое использует данные ядра с двумя объектами «Папка» и «Элемент» с отношениями To Many
, я получаю сообщение об ошибке.
[(п)] не имеет элемент, называемый exchangeObjectAtIndex
для;
tableView.didMoveCellFromIndexPathToIndexPathBlock = {(fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) -> Void in
let delegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context: NSManagedObjectContext = delegate.managedObjectContext!
self.itemsArray.exchangeObjectAtIndex(toIndexPath.row, withObjectAtIndex: fromIndexPath.row)
var error: NSError? = nil
if !context.save(&error) { abort() }
}
Это потому, что:
Классов NSSet, NSMutableSet и NSCountedSet объявить программный интерфейс на неупорядоченные коллекции объектов.
Поэтому я попытался преобразовать NSSet в NSMutableArray для управления порядком объектов.
func itemsMutableArray() -> NSMutableArray {
return NSMutableArray(array: (item.allObjects as! [Item]).sorted{ $0.date.compare($1.date) == NSComparisonResult.OrderedAscending })
}
Но затем я получаю следующее сообщение об ошибке в моем табло; это связано с тем, что изменчивый массив равен AnyObject
, поэтому быстрый не считает, что он имеет свойство title.
cell.textLabel? .text = folderMutableArray [indexPath.row] .title
Итак я иду туда, где я начал. Я просто пытаюсь создать простой список и упорядочить порядок объектов.
Вот мой Folder
Класс:
class Folder: NSManagedObject {
@NSManaged var date: NSDate
@NSManaged var title: String
@NSManaged var item: NSSet
/// Method 1 - Converting to a NSMutableArray
// func itemsMutableArray() -> NSMutableArray {
// return NSMutableArray(array: (item.allObjects as! [Item]).sorted{ $0.date.compare($1.date) == NSComparisonResult.OrderedAscending })
// }
// Method 2 - creating an array of type Item
func itemArray() -> [Item] {
let sortByDate = NSSortDescriptor(key: "Date", ascending: true)
return item.sortedArrayUsingDescriptors([sortByDate]) as! [Item]
}
}
производительность приложения делают это все время, так что я знаю, что это возможно, но не знает, как, Кто-нибудь знает, где я неправильно или есть какие-либо идеи или предложения?
Большое вам спасибо за этот ответ, действительно информативный. Проделал некоторые рефакторинг кода и обновил модель Core Data и классы, как вы предложили. Я понимаю обновления до сих пор, но не знаю, что вы имеете в виду при добавлении элемента в папку. Почему мне нужно добавлять к arrayOfItems, когда это создает массив элементов? или почему мне нужно вызвать 'rebateItems()' после? Причина, по которой я прошу, - это полностью понять код, а не слепо обновлять код, надеясь на результат. Я обновил свой вопрос с помощью кода, чтобы добавить элемент. – RileyDev
Дайте пару минут. Я расскажу об этом в своем ответе. –
Я собираюсь принять этот ответ, большое вам спасибо за вашу помощь. Я действительно ценю это! Очень информативно. Все еще работая над ошибкой, которая, когда я перемещаю ячейку, другие ячейки меняют свои имена на ячейку, которую они заменяют. Например. если их 5 ячеек - 1,2,3,4,5, а I - 3 в конце, где 5 должно быть вместо 1,2,4,5,3, другие ячейки обновляют свой текст на заменяющую ячейку, например. 1,2,3 (4), 4 (5), 3 (перемещенная ячейка) – RileyDev