我有一個自定義的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 })
}
但是,然後我在我的tableview中得到以下錯誤;這是因爲可變數組是AnyObject
,所以swift不相信它具有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模型和Classes。 我瞭解到目前爲止的更新,但不確定將項目添加到文件夾時的意思。爲什麼我需要追加到arrayOfItems創建一個項目的數組呢?或者爲什麼我需要在之後調用'regenerateItems()'?我所要求的理由是完全理解代碼,而不是盲目地更新希望得到結果的代碼。我用代碼更新了我的問題以添加一個項目 – RileyDev
給我幾分鐘我將在我的回答中對此展開 –
我將接受此答案,非常感謝您的幫助我真的很感激它!非常豐富。仍然在研究一個錯誤,當我移動單元格時,其他單元格將其名稱更改爲它們要替換的單元格。例如。如果它們是5個單元 - 1,2,3,4,5,並且我將3放置在5應該替代1,2,4,5,3的末端,則其他單元將它們的文本更新到替換單元,例如, 1,2,3(4),4(5),3(移動的單元格) – RileyDev