[AnyObject]? " n'a pas un membre nommé 'indice'
Je suis le chargement d'une liste d'objets à partir d'une base de données de la base de données dans une vue de table.
class ScheduleViewController: UITableViewController {
private var items: [AnyObject]?
//MARK: - Table view data source
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if let itemCount = items?.count {
return itemCount
}
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("DayScheduleCell", forIndexPath: indexPath) as DayScheduleCell
if let act = items[indexPath.row] as Activity {
if act.client != nil {
//...
}
}
return cell
}
}
Les données sont récupérées à l'intérieur d'une fermeture donc je l'ai déclaré à un items
tableau comme une option, car cela pourrait être nul lors de la première manche.
J'obtiens le message d'erreur '[AnyObject]? " n'a pas un membre nommé 'indice' à cette ligne if let act = items[indexPath.row] as? Activity
.
Je ne peux pas comprendre comment résoudre ce problème.
OriginalL'auteur Isuru | 2014-09-22
Vous devez vous connecter pour publier un commentaire.
Le tableau est déclaré que:
donc, comme vous l'avez également dit, c'est une option
Dans swift un
optional
est un enum, donc un type sur son propre - et en option, il peut contenir soit unnil
valeur ou un objet du type.Vous souhaitez appliquer l'indice de la matrice, de ne pas l'option, donc avant de l'utiliser, vous devez déballer le tableau à partir de l'option
mais ce n'est pas tout, vous devez également utiliser le conditionnel abattu:
parce que l'expression précédente peut s'évaluer à néant
Donc la bonne façon d'écrire l'instruction if est
if act.client != nil
. Le client de la propriété est une propriété qui est titulaire d'unClient
objet. Veuillez voir leNSManagedObject
sous-classe deActivity
. Dans le Modèle de Données inspecter en vertu de propriétés pour le client, ses vérifié que facultatif.client
n'est pas une option, et comme tel il ne peut êtrenil
- donc vous ne pouvez pas vérifier si il est pas nul. Queif
est conceptuellement redondant et bien sûr considéré comme une erreur pour le compilateurAinsi, selon ceci question, même si les propriétés sont marqués en option dans la Base de Données, il n'est pas mentionné dans le générés
NSManagedObject
classes. Vous devez l'ajouter manuellement. J'ai ajouté un?
en face de la propriété du client et maintenant il fonctionne très bien.OriginalL'auteur Antonio
Tout d'abord vous avez besoin de déballer ou facultatif de la chaîne d'éléments qu'il peut être
nil
.AnyObject
a des comportements différents lors de la prise comme élément de la matrice, en raison du fait queAnyObject
peut être une fonction. Vous devez lancer des objets comme ceci:Si
items
ne sera jamais contenir une fonction que vous pouvez utiliserau lieu et fonte avec:
Désolé, j'ai eu une faute de frappe. Essayez-le maintenant.
Que l'erreur a disparu. Mais je reçois un nouveau message d'erreur Ne peut pas invoquer '!=' avec une liste d'arguments de type '(@lvalue Client, NilLiteralConvertible)' à la ligne
if act.client != nil
Est
client
bien déclaré que l'option valeur?C'est un autre objet dans ma base de données base de données. Ici est le
NSManagedObject
sous-classe. Dans le Modèle de Données de l'Inspecteur en vertu de Propriétés, ses vérifié que Facultatif.OriginalL'auteur Kirsteins
J'ai réglé mon problème par la conversion des index var type de UInt Int
J'espère que cela peut aider quelqu'un qui reçois toujours ce problème.
OriginalL'auteur z33