【发布时间】:2015-07-11 13:45:32
【问题描述】:
我有一个自定义的UITableView,它负责重新排列单元格的动画,并且与不使用核心数据的标准测试数组完美配合。
在尝试使用核心数据与两个实体“文件夹”和“项目”以及To Many 关系的应用程序时,我收到一个错误。
[(Item)] 没有名为 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,所以 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]
}
}
生产力应用程序一直这样做,所以我知道这是可能的,但不确定如何,有人知道我哪里出错或有任何想法或建议吗?
【问题讨论】:
标签: ios swift uitableview core-data