2017-10-24 8 views
0
func createRowOfButtons(buttonTitles: [NSString]) -> UIView { 
    var buttons = [UIButton]() 
    let keyboardRowView = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 50)) 
    var dict = [UIButton:String]() 
    for buttonTitle in buttonTitles 
    { 
     let button = createButtonWithTitle(title: buttonTitle as String) 
     buttons.append(button) 
     keyboardRowView.addSubview(button) 
     dict.updateValue("\(buttonTitle)", forKey: button) 
    } 
    allButtons = NSMutableDictionary(dictionary: dict) 
    //error:[UIButton copyWithZone:]: unrecognized selector sent to instance 0x7e011bc0 
    addIndividualButtonConstraints(buttons: buttons, mainView:keyboardRowView) 
    return keyboardRowView 
} 

を送った私は、私はUIButtonNSMutableDictionaryを作成するためのiOSの新たいのですが、それは次のエラーを与える:[UIButton copyWithZone:]:認識されていないセレクタはインスタンスへ

Cannot cast 'UIButton' to 'NSCopying'.

を私は理解していませんなぜこのエラーが発生するのですか?

ありがとうございます。

+0

なぜあなたはSwiftで 'NSMutableDictionary'を使う必要がありますか? – Hexfire

+0

それを 'var dict = [UIButton:String]()'から 'var dict = [String:UIButton]()'に戻します。 –

答えて

0

のpheelicksの答えそれはあります実際にあなたがNSStringまたはNSMutableArrayを使用することに頼らざるを得ない理由、特にあなたがブリッジすることを考慮に入れてNSString~Stringであり、実際には役に立たないことを暗示している。NSString

ローカルbuttonsdict配列もループの終了後にallButtonsに割り当てるだけで不要です。それはあなたが(正しいスウィフト[String: UIButton]タイプの代わりNSMutableDictionaryで)直接そのストレージに対処できることを意味します。そのタイトルによって

var allButtons: [String: UIButton]! 

func createRowOfButtons(buttonTitles: [String]) -> UIView { 

    let keyboardRowView = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 50)) 

    // Initialize/reset dictionary 
    // Do it here or on declaration 
    allButtons = [String: UIButton]() 

    // Populate dictionary 
    buttonTitles.forEach { title in 
     let button = UIButton()// createButtonWithTitle(title: title) 
     keyboardRowView.addSubview(button) 
     allButtons[title] = button 
    } 

    addIndividualButtonConstraints(buttons: Array(allButtons.values), 
            mainView: keyboardRowView) 
    return keyboardRowView 
} 

あなたもアクセスボタン、その逆はありません。

0

UIButtonNSCopying に準拠していないので、あなたは、AppleのドキュメントからNSDictionary

でキーとして使用することはできません。

The key is copied (using copyWithZone:; keys must conform to the NSCopying protocol).

参考:This Question

関連する問題