У меня есть две таблицы в отдельных представлениях, в каждом списке таблицы есть отдельный объект в CoreData. Пользователь может нажать кнопку в любой ячейке, чтобы переместить ее в другой список. Это работает, элементы можно перемещать одним нажатием, все сохраняется и сохраняется после закрытия приложения.Объект CoreData, вставленный по видимой случайной позиции в списке
Проблема
В настоящее время код должен пересчитать элементы в списке адресатов, а затем добавить элемент перемещается к концу своего нового списка. Этого не происходит. Вместо этого элемент вводится произвольно (не в конце или в начале). Однако, как только он вставлен, любые дальнейшие перемещения элементов будут находиться под ним. Я попытался заменить функцию count на 1, потому что я действительно хочу, чтобы перемещенный элемент отображался наверху в любом случае, но это не помогает.
Код
Во-первых, вот код viewDidLoad, который запускает загрузку основной список каждый раз, когда появляется главный вид:
override func viewDidLoad() {
super.viewDidLoad()
currentListEntity = curList
//Load the list from Core Data
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext!
let fetchRequest = NSFetchRequest(entityName: currentListEntity)
let sortDescriptor = NSSortDescriptor(key: "displayOrder", ascending: true)
fetchRequest.sortDescriptors = [ sortDescriptor ]
var error: NSError?
let fetchedResults = managedContext.executeFetchRequest(fetchRequest, error: &error) as? [NSManagedObject]
if let results = fetchedResults {
taskList_Cntxt = results
} else {
println("Could not fetch \(error), \(error!.userInfo)")
}
}
Функция, которую я хотел бы ожидать, чтобы добавить перемещенный объект в конец нового списка (который является параметром сущности), но вместо этого вставляет его среди других элементов списка:
func addToList (sender: AnyObject, entity: String) {
//Setup CoreData context
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext!
let entity = NSEntityDescription.entityForName(entity, inManagedObjectContext: managedContext)
let task = NSManagedObject(entity: entity!, insertIntoManagedObjectContext:managedContext)
//Figure out the cell pressed
let button = sender as! UIButton
let contentView = button.superview!
let cell = contentView.superview as! CustomTableViewCell_F2
//Set cell contents to variables
var nameValue = cell.nameLabel!.text
var descValue = cell.descLabel!.text
//Set content variables to NSObject called "task"
task.setValue(nameValue, forKey: "name")
task.setValue(descValue, forKey: "desc")
//Error check
var error: NSError?
if !managedContext.save(&error) {
println("Could not save \(error), \(error?.userInfo)")
}
//Get count, append to end, sort, save
var insertAt = taskList_Cntxt.count
addTask(task, displayOrder: insertAt)
updateDisplayOrder()
managedContext.save(nil)
}
//Referenced by larger add-task function
func addTask(task: NSManagedObject, displayOrder: Int) {
taskList_Cntxt.insert(task, atIndex: displayOrder)
updateDisplayOrder()
}
//Called to update Core Data after append, delete, and drag/drop
func updateDisplayOrder() {
for i in 0..<taskList_Cntxt.count {
let task = taskList_Cntxt[i]
task.setValue(i, forKey: "displayOrder")
}
}
Любые идеи о том, как это исправить? Идеально добавить в верхнюю часть списка, но в этот момент добавить его к нижней части тоже было бы здорово.
Кажется, что вы добавляете задачу в список в вашей функции 'addTask', которую вы не указали. Также 'updateDisplayOrder' уверен, похоже, что это повлияет на порядок отображения, но это тоже не включено. Оба они почти наверняка имеют решающее значение для правильного упорядочения заказа. –
@TomHarrington Извините, что отправил это после того, как вы продержались большую часть ночи, пытаясь решить эту и еще одну проблему, очевидно, необходимый сон! Я включил обе функции –