错误:找不到接受提供的参数的“标题”的重载
Posted
技术标签:
【中文标题】错误:找不到接受提供的参数的“标题”的重载【英文标题】:Error: Could not find overload for 'title' that accepts the supplied arguments 【发布时间】:2015-07-06 23:52:43 【问题描述】:目前我有一个名为Folder
的NSManaged 对象的子类,其属性名为item
,其类型为NSSet
。我有一个返回NSMutableArray
的函数,我试图在表格视图中显示数据(然后重新排列表格中显示的顺序)。
class Folder: NSManagedObject
@NSManaged var title: String
@NSManaged var date: NSDate
@NSManaged var item: NSSet
func itemMutableArray() -> NSMutableArray
return NSMutableArray(array: (item.allObjects as! [Checklist]).sorted $0.date.compare($1.date) == NSComparisonResult.OrderedAscending )
TableViewController:
var itemMutableArray: NSMutableArray!
itemMutableArray = folder.itemMutableArray()
cell.textLabel?.text = itemMutableArray[indexPath.row].title //Error
不幸的是,当使用这个函数时,这会在我的 tableview 中返回一个错误。
错误找不到接受提供的参数的“标题”的重载
最终我想要实现的是显示数据并移动单元格以更改 NSSet 的顺序。
table.didMoveCellFromIndexPathToIndexPathBlock = (fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) -> Void in
let delegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context: NSManagedObjectContext = delegate.managedObjectContext!
context.deleteObject(self.itemArray[indexPath!.row] as NSManagedObject )
self.itemArray.exchangeObjectAtIndex(toIndexPath.row, withObjectAtIndex: fromIndexPath.row)
PS:最初我有一个返回对象数组的函数,但我无法修改 NSSet 的顺序,因为它们没有排序。
func itemArray() -> [Item]
let sortDescriptor = NSSortDescriptor(key: "date", ascending: true)
return item.sortedArrayUsingDescriptors([sortDescriptor]) as! [Item]
有人对我目前出错的地方有任何建议吗?
【问题讨论】:
【参考方案1】:表达式itemMutableArray[indexPath.row].title
的问题在于,因为您将itemMutableArray
键入为NSMutableArray,所以itemMutableArray[indexPath.row]
是AnyObject。因此,Swift 没有理由相信这个东西有 title
属性。您需要将其转换为 确实 具有 title
属性的东西(尽管如果可能的话,完全避免使用 NSMutableArray 会更好,因为 Swift 数组 是 em> 可变的)。
【讨论】:
那么您是否建议更改我的子类中的函数以返回一个快速数组,然后在我的表格视图控制器中使用一个快速数组?我对 atm 有点困惑,因为我收到了关于如何实现修改 tableview 顺序的能力的不同建议。我最初有一个不同的函数,它创建了一个 [Item] 类型的 swift 数组,但这不是可变的。 一个[item]
类型的Swift 数组,用var
声明,是 可变的。然而,做你想做的事。我只是说 if 你坚持使用 NSMutableArray,then Swift 没有关于数组元素的类型信息,这就是你得到错误的原因。我告诉你如何解决它。走哪条路取决于你。
我的意思是我无法交换 NSSet 类型的索引路径,因为它没有顺序。我不确定如何使用核心数据移动表格视图单元格,但我了解您的回答回答了我的问题以及为什么我收到错误,因此将接受您的回答。
“我不确定如何使用核心数据移动表格视图单元格”我不知道您所说的“移动表格视图单元格”是什么意思。但如果那是你真正想知道的,你应该问 that 作为一个新问题!
此外,如果整数的顺序和可索引性对您很重要——例如,表格的第四行将从该集合中的第四项填充——那么选择一个集合作为集合类型将很傻。数组是表格视图数据模型的自然基础。以上是关于错误:找不到接受提供的参数的“标题”的重载的主要内容,如果未能解决你的问题,请参考以下文章
找不到接受提供的参数的“logInWithPermissions”的重载
找不到接受类型参数列表的 XCTAssertEqual 的重载 ([String : AnyObject], [String : AnyObject])