web-dev-qa-db-fra.com

pourquoi est-ce que je reçois "Il faut que le masque de redimensionnement automatique se traduise en contraintes pour avoir _setHostsLayoutEngine: YES" dans xcode 6 beta

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?

39
Emwee

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.

54
pbuchheit

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.

31
neevek

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.

13
Jose Servet

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.

8
Charles A.

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.

 Note that the top level object in the Xib is a UITableViewCell not a UIView

4
Daniel Molina

Dans mon cas, j'utilisais un UITableViewCell dans un UIView pour créer une cellule personnalisée enter image description here

puis j'ai supprimé la cellule de UIView, puis ajouté directement tout le contenu de UIView, ce qui a résolu mon problème . enter image description here

J'espère que cela vous aide aussi. Bonne chance

3
Kunal Gupta

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.

3
ashNair

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.

2
Harsha

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.

0
crubio