2016-08-29 12 views
10

Nie wiem, co jest nie tak z moim kodowaniem. Próbowałem wykonać samouczek, ale wystąpił ten sam błąd.Nie jest zgodny z protokołem UIPickerViewDataSource

Błąd:

Type 'FourthViewController' does not conform to protocol 'UIPickerViewDataSource'

Oto mój kod:

import UIKit 

let characters = ["Jaja Bink", "Luke", "Han Solo", "Princess Leia"]; 

let weapons = ["LightSaber", "Pistol", "Keris"]; 

class FourthViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { 

    @IBOutlet weak var doublePicker: UIPickerView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { 
     return 2 
    } 


    func pickerView(pickerView: UIPickerView, 
        titleForRow row: Int, 
           forComponent component: Int) -> String? { 

     if component == 0 { 
      return characters[row] 
     } else { 
      return weapons[row] 
     } 

    } 

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int? { 
     if component == 0 { 
      return characters.count 
     } else { 
      return weapons.count 
     } 
    } 

} 
+0

Prosimy nie dodawać "rozwiązany" do Twojego pytania. Jeśli odpowiedź rozwiązała Twój problem, zaznacz odpowiedź jako zaakceptowaną; możesz również zamieścić własną odpowiedź, jeśli samodzielnie rozwiązałeś problem. Dziękuję Ci. – Moritz

Odpowiedz

4

Ponieważ metoda wymaga delegat nie jest poprawna.

Wymień go w ten sposób:

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 

    if component == 0 { 
     return characters.count 
    } else { 
     return weapons.count 
    } 
} 

Twoja metoda delegat zwraca Int? która nie jest poprawna.

+1

O Boże! Nagle zrealizowałem na moim kodowaniu func pickerView (pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int i put extra Question mark '?' na końcu int. Teraz problem został rozwiązany. Dzięki! –

+1

Zaakceptuj każdą odpowiedź, jeśli pomaga .. :) –

0

Trzeba je zaimplementować to funkcja:

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int 
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 
+0

O Boże! Nagle zrealizowałem na moim kodowaniu func pickerView (pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int i put extra Question mark '?' na końcu int. Teraz problem został rozwiązany. Dzięki! –

23

Wymiana wersji przestarzałej metody protokołu UIPickerViewDataSource, jeśli używasz Swift 3 mógłby działa dla Ciebie.

Metoda Nieaktualne protokołu

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { 
    return 1 
} 

Najnowsze Metoda protokołu w Swift 3

func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 1 
} 

Uwaga: To samo odnosi się do innych wymaganych metod protokołu. tj

Deprecated:

func pickerView(pickerView: UIPickerView!, numberOfRowsInComponent component: Int) -> Int

Recent Version:

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int

Powiązane problemy