J'ai le code suivant dans un UITiftViewController Swift, mais je reçois un masque "Doit traduire le masque de réaugmentation automatique en contraintes pour avoir _setHostsLayoutEngine: exception YES à la 2ème ligne. ).
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell? {
let cell:TodoItemCell = tableView.dequeueReusableCellWithIdentifier("TodoItemCell", forIndexPath: indexPath) as TodoItemCell
let row = indexPath.row
cell.titleLabel.text = self.todoItems![row].title
self.callback!(row)
// Configure the cell...
return cell
}
Qu'est-ce que je fais mal?
Je ne sais pas dans quelle mesure cela aide, mais je vois la même erreur si j'essaie de placer une cellule directement dans un UIView plutôt que dans un tableau. Cela a bien fonctionné avec Xcode 5, donc je suppose que c'est un bug avec XCode6/ios8. En attendant, déboguez dans cette méthode et examinez votre tableView. Assurez-vous qu'il y a bien une instance de la cellule que vous essayez de récupérer.
Mise à jour: Nous avons déposé un rapport de bogue avec Apple et je peux confirmer qu'il s'agit d'un problème lié à iOS 8. Malheureusement, il est toujours là depuis la version bêta 5, espérons-le, il sera corrigé avant la version finale.
Ceci estPASun bogue, vous ne pouvez simplement pas utiliser une UIView
comme cellule pour la vue tableau, vous devez vous assurer que la vue de niveau supérieur du fichier nib est une UITableViewCell
.
Dans mon cas, je chargeais un fichier nib avec un UITableViewCell contenu dans un UIView. Après la désactivation de l'autolayout dans le fichier nib, je n'ai plus d'exception.
J'ai également rencontré ce problème et cela était dû au fait qu'une sous-classe UITableViewCell
était utilisée dans la hiérarchie des vues en dehors d'un UITableView
, comme indiqué dans les autres réponses. Dans ce cas, j'avais peu de temps et je ne pouvais donc pas déplacer les fonctionnalités présentes dans cette sous-classe dans une sous-classe UIView
. La solution de contournement que j'ai proposée consistait simplement à créer une instance UIView
dans ma hiérarchie de vues dans laquelle la cellule était supposée être, à y transplanter la hiérarchie de vues de l'instance de cellules et à la supprimer de la hiérarchie de vues affichée. Tant que j'ai conservé les vues déplacées en fonction des différentes propriétés de l'instance de cellule, tout continue à bien fonctionner.
C'est un peu hacky, mais cela gardera les choses en place jusqu'à ce que le temps de refactorisation soit disponible.
Les gens, ceci IS pas un bogue. Comme jamais dit ci-dessous:
"Ce n'est PAS un bogue, vous ne pouvez simplement pas utiliser UIView comme cellule pour l'affichage sous forme de tableau, vous devez vous assurer que la vue de niveau supérieur dans le fichier nib est un UITableViewCell."
Je l'ai testé et ça marche.
Vous devez créer le fichier Xib et supprimer la vue de niveau supérieur dont il dispose. Ensuite, vous faites glisser une UITableViewCell dans la nib. De cette façon, ce problème ne se produira pas.
La désélection de l’option 'use auto layout' parmi les propriétés du .xib a résolu mon problème. - Afficher ce que j'ai fait peut aider les autres.
Je vous remercie.
Dans mon cas, j'avais copié et collé la cellule, mais il manquait des contraintes qui entraînaient cette erreur. Si vous copiez la cellule dans un autre fichier xib, assurez-vous également que les contraintes sont copiées ou que vous les créez à nouveau.
Dans mon cas, le parent UITableViewCell était la vue principale au lieu de UITableView. Dans ce cas, il vous suffit de placer la cellule à l'intérieur de la table.
Je pense que cela pourrait être un problème courant si vous faites glisser la cellule dans la vue sans vous soucier de la hiérarchie correcte.