2016-10-08 2 views
0

Ich versuche eine Variable über Code an eine andere Ansicht zu übergeben. Wenn ein Benutzer auf Daten einer Tabellenansicht klickt, übergibt meine App die Tabellendaten an die nächste Ansicht. Aber ich bin immer ein "Klasse hat keine initialisers" auf dem zweiten Schirm:Swift - Klasse hat keinen Initialisierer

Tabellenansicht aufrufen 2. Bildschirm auf Klick:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
{  
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 

let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("editFriend") as! EditFriendViewController 

self.presentViewController(nextViewController, animated: true, completion: nil) 

nextViewController.friend = friendArray[indexPath.row]; 
} 

2. Bildschirm Code:

import UIKit 
import CoreData 

class EditFriendViewController: UIViewController { 

var friend: Friends 

@IBOutlet weak var fName: UITextField! 
@IBOutlet weak var lName: UITextField! 
@IBOutlet weak var mobile: UITextField! 
@IBOutlet weak var gender: UIPickerView! 
@IBOutlet weak var address: UITextField! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    fName.text = friend.firstName!; 
    lName.text = friend.lastName!; 
    mobile.text = friend.mobile!; 
    address.text = friend.address!; 
} 

}

+2

Mögliche Duplikat [Klasse hat keine initializers Swift] zu ersetzen (http://stackoverflow.com/questions/27797351/class-has- no-initialisers-swift) –

Antwort

1

auf die Antwort von @Enix Hinzufügen und @Shailesh, ich sehe, können Sie die Daten zu nextViewController sind vorbei, nach dem viewController präsentiert

Daher Ich glaube nicht, dass Sie den Wert in der nextVC bekommen Immer werden Sie nil dort bekommen.

So übergeben Sie die Daten vor der Präsentation der ViewController.

-Code

self.presentViewController(nextViewController, animated: true, completion: nil) 
nextViewController.friend = friendArray[indexPath.row]; 

VON

nextViewController.friend = friendArray[indexPath.row]; 
self.presentViewController(nextViewController, animated: true, completion: nil) 
+0

danke für die heads-up! –

2

Das liegt daran, dass Sie eine Eigenschaft definiert haben, ohne sie in Ihrer init() Methode zu initialisieren. Wenn Sie eine Eigenschaft benötigen, um an anderer Stelle anstelle von init Methode zu initiieren, z. viewDidLoad. Das ist sehr häufig in ViewController. So müssen Sie die Eigenschaft als implizit definieren ungeöffneten optional, das heißt, Sie müssen friend als Friends! statt Friends erklären, oder wenn Sie die Eigenschaft müssen optional sein, so erklären es als Friend?

import UIKit 
import CoreData 

class EditFriendViewController: UIViewController { 
    var friend: Friends! // declare friend as implicitly unwrapped optional, you are responsible to assign any value to it before using it 
    .... 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     friend = Friend() // Assign a value to friend property 
    } 
} 
+0

Hey ich habe den Fehler los. Aber jetzt kann ich nicht scheinen, die Daten im Freundobjekt zu erhalten. Ich erhalte einen "unerwartet gefundenen Nullwert beim Aufheben eines optionalen Werts", wenn ich versuche, die Daten des Objekts in ein Textfeld zu schreiben. –

+0

@ Janmenjaya geben Ihnen Hinweise zu Ihrem Problem. Versuchen Sie seine Antwort. Sie sollten den Wert einem Freund zuweisen, bevor der View-Controller angezeigt wird. – Enix

0

machen Freund Variable als optional

 var friend: Friends?  

Und beim Zugriff auf den Wert Verwendung

if let friend = friend { 
     //use friend value to assign to values to label } 

Compiler sagt Ihnen Freund Variable hat keinen Initialisierer. Alle Variablen einer Klasse sollten einen Anfangswert über die init-Methode haben oder als optionals deklariert werden. Und auch Semikolons sind in swift nicht zwingend erforderlich, bis Sie in eine einzelne Zeile in Ausdruck oder Anweisung schreiben, so dass Sie die Semikolons am Ende entfernen können.

Verwandte Themen