2017-10-24 17 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 
} 

인스턴스로 전송하지만, 다음과 같은 오류 제공 :[있는 UIButton copyWithZone가 :] : 인식 할 수없는 선택기 나는 아이폰 OS에 새, 나는 <code>UIButton</code>의 <code>NSMutableDictionary</code>를 만들 생각

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 에 적합하지 않으며, 그래서 당신은 애플의 문서에서 NSDictionary

에서 핵심으로 사용할 수 없습니다

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

참조 : This Question