La classe n'a pas d'initialiseurs: Swift Erreur
J'ai un problème avec mon ViewController.
Mon code a une erreur sur les initialiseurs et je ne comprends pas pourquoi.
S'il vous plaît, prenez un moment pour regarder mon code:
import UIKit
class ViewController: UIViewController, UITableViewDataSource {
let sectionsTableIdentifier = "SectionsTableIdentifier"
var names: [String: [String]]!
var keys: [String]!
@IBOutlet weak var tableView: UITableView!
var searchController: UISearchController
//methods
override func viewDidLoad() {
super.viewDidLoad()
//Do any additional setup after loading the view, typically from a nib.
tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: sectionsTableIdentifier)
let path = NSBundle.mainBundle().pathForResource("sortednames", ofType: "plist")
let namesDict = NSDictionary(contentsOfFile: path!)
names = namesDict as! [String: [String]]
keys = namesDict!.allKeys as! [String]
keys = keys.sort()
let resultsController = SearchResultsController()
resultsController.names = names
resultsController.keys = keys
searchController = UISearchController(searchResultsController: resultsController)
let searchBar = searchController.searchBar
searchBar.scopeButtonTitles = ["All", "Short", "Long"]
searchBar.placeholder = "Enter a search term"
searchBar.sizeToFit()
tableView.tableHeaderView = searchBar
searchController.searchResultsUpdater = resultsController
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
//Dispose of any resources that can be recreated.
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return keys.count
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let key = keys[section]
let nameSection = names[key]!
return nameSection.count
}
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return keys[section]
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(sectionsTableIdentifier, forIndexPath: indexPath) as UITableViewCell
let key = keys[indexPath.section]
let nameSection = names[key]!
cell.textLabel!.text = nameSection[indexPath.row]
return cell
}
func sectionIndexTitlesForTableView(tableView: UITableView) -> [String]? {
return keys
}
}
Quel est le problème?
L'erreur est que la classe n'a pas d'initialiseur. Je n'ai pas de variables sans valeur.
Quel est le message d'erreur exact?
OriginalL'auteur iGermanos | 2015-09-22
Vous devez vous connecter pour publier un commentaire.
Ligne problématique est
Changer de
ou si vous n'êtes pas l'initialiser dans la perspective des cycles de vie, en option pour éviter les plantages:
il serait peut-être mieux être "var searchController: UISearchController?" au lieu de cela, donc si il est nul, il n'y aura pas de crash de l'application. plus il va obtenir la valeur par défaut initiateur de " néant
Ouais, a ajouté que de répondre. Merci 🙂
OriginalL'auteur Sahil Kapoor
Votre ligne de capture de l'erreur est:
var searchController: UISearchController
parce que vous n'avez jamais init searchController dans un Cycle de vie de la fonction init de votre UIViewController. Je vous conseille ne pas la forcer à déballer le var (comme Sahil dit ci-dessus) mais pour bien init dans un init func comme ceci:
Dans Swift, vous devriez toujours éviter de la force de déballer l'Objet, comme ci-dessus, pour éviter un crash dans votre application, ou de l'utilisation si-Laissez/Garde-Laissez-modèle
Les acclamations de la France
OriginalL'auteur jlngdt