错误:找不到接受提供的参数的“标题”的重载

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 作为一个新问题! 此外,如果整数的顺序和可索引性对您很重要——例如,表格的第四行将从该集合中的第四项填充——那么选择一个集合作为集合类型将很傻。数组是表格视图数据模型的自然基础。

以上是关于错误:找不到接受提供的参数的“标题”的重载的主要内容,如果未能解决你的问题,请参考以下文章

Swift 找不到接受提供的参数的“+=”的重载

找不到接受提供的参数的“logInWithPermissions”的重载

找不到接受提供的参数的“/”的重载

Swift:找不到“|”的重载接受提供的参数

找不到接受提供的参数的 init 重载

找不到接受类型参数列表的 XCTAssertEqual 的重载 ([String : AnyObject], [String : AnyObject])