“_.SegmentedControlItems”不实现methodSignatureForSelector: - 麻烦了无法识别的选择

问题描述:

我编程方式创建UISegmented控制,而不storyboard.Instead从阵列中拔出分割的项目,我想使用模型类的,“_.SegmentedControlItems”不实现methodSignatureForSelector: - 麻烦了无法识别的选择

class SegmentedControlItems{ 
    let title: String 

    init(title:String) { 
     self.title = title 
    } 
} 

然后,在表视图功能,我写了下面的代码,如果我通过项目的阵列

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
     headerView.backgroundColor = UIColor.white 
     let items:[SegmentedControlItems] = { 
      let item1 = SegmentedControlItems(title: "Repeat Task") 
      let item2 = SegmentedControlItems(title: "One time task") 
      return [item1, item2] 
     }() 

     let segmentedControl: UISegmentedControl = { 

      let segmentedControl = UISegmentedControl(items: items) 

      segmentedControl.tintColor = UIColor(red:0.44, green:0.75, blue:0.27, alpha:1.0) 
      segmentedControl.selectedSegmentIndex = 0 
      segmentedControl.translatesAutoresizingMaskIntoConstraints = false 
      return segmentedControl 
     }() 
     headerView.addSubview(segmentedControl) 

} 

我的应用程序工作正常。但是在我写上面的代码后崩溃了。并给了我这个错误控制台 - SForwarding:警告:类对象0x600000251640 'Appname.SegmentedControlItems' 不实现methodSignatureForSelector: - 麻烦了 无法识别的选择 - [Appname.SegmentedControlItems复制]

请帮

+0

为什么你使用'SegmentedControlItems'? '-init(items:)'等待一个String或UIImage对象的数组。一个字符串符合'NSCopying'协议,所以我猜'UISegmentedControl'会拷贝它们。要么你不使用'SegmentedControlItems',或者你可以让它们符合'NSCopying'。 – Larme

这里的问题在于你提供了一个对象数组(它依次包含值作为一个属性),而不是传递一个标题数组。

如果你想使用的模式,你必须以下行

let segmentedControl = UISegmentedControl(items: items) 

改变

let segmentedControl: UISegmentedControl = UISegmentedControl(items: items.map({ 
     $0.title 
    })) 
+0

非常感谢..它工作.. :) –

+0

很高兴成为帮助 – Malik