2014-10-28 16 views
14

mam ten plik klasy do przyjmowania płatności kartąinit (koder :) nie został wdrożony w szybkim

import UIKit 
class PaymentViewController: UIViewController , PTKViewDelegate { 

    var card : STPCard 
    var PaymentView : PTKView 
    var button = UIButton.buttonWithType(UIButtonType.System) as UIButton 

    init(PaymentView : PTKView , button : UIButton, card : STPCard) { 
     self.PaymentView = PaymentView 
     self.button = button 
     self.card = card 
     super.init() 
    } 
    required init(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
} 

Kiedy budować, to działa dobrze, ale kiedy go wykonać (uruchomić) na mój rzeczywiste urządzenie, otrzymuję

fatal error: init(coder:) has not been implemented. 

Wszelkie pomysły?

+0

Wiem, bo linia FatalError to robi, ale dlaczego muszę zrobić wymagane startowych i dlaczego jest nie tylko zadowolony z initem. – Jason

+0

rzeczywista metoda wyrzuci ci fatalny błąd _... Nie jestem pewien, czego naprawdę oczekiwałeś od linii 'fatalError()' - masz dokładnie to, co ta linia powinna zrobić: wyjątek fatat__. możesz uniknąć takiego wyjątku, implementując ciało metody. – holex

+0

Tak, wiem, Holex, ale nie jestem pewna, dlaczego WYMAGANE jest potrzebne i co powinienem włożyć. – Jason

Odpowiedz

10

Na podstawie skonfigurowanej hierarchii dziedziczenia. PaymentViewController odziedziczy 3 metody init. UIViewController zapewnia init(nibName:bundle) jako inicjator. UIViewController jest również zgodny z NSCoding, skąd pochodzi required init(coder:). UIViewController również dziedziczy po NSObject, która zapewnia podstawową metodę init().

Problem związany z wywołaniem init(coder: podczas tworzenia instancji ViewController z pliku .xib lub scenorysu. Ta metoda jest wywoływana w celu cofnięcia archiwizacji obiektów .xib/storyboard.

Z dokumentacji:

iOS inicjuje nowy kontroler widoku poprzez wywołanie initWithCoder: zamiast metody.

Należy dzwonić nadklasę wyznaczony inicjatora w sposobie init, który jest init(nibName:bundle) Uwaga: to jest dobre dla obu tych parametrów będzie zerowe. Również Twój init(coder:) override powinien zadzwonić super.init(coder:)

+0

więc jaki byłby kod? @ JMFR – DeveloperACE

+13

'wymagany init (koder aDecoder: NSCoder) { super.init (koder: aDecoder) }' – JMFR

5

Prosty obejście zrobi:

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
}