À l'aide de types enum comme des propriétés en Objective-C
Je suis un vétéran .NET développeur de faire ma première incursion dans l'Objectif C de la programmation. J'ai de la difficulté avec une propriété d'un type enum. Un certain contexte... j'en ai un en-tête de classe enum comme ceci:
typedef enum {
Open,
Unavailable,
Unknown
} LocationStatus;
@interface Location : NSObject {
LocationStatus status;
}
@property (nonatomic) LocationStatus status;
@end
et une mise en œuvre qui ressemble à ceci:
@implementation Location
@synthesize status;
@end
À un certain point dans le code, je suis à la définition de la valeur comme ceci:
location1.status = Open;
Le débogueur évalue alors cette comme ayant de la valeur correcte, et c'est de résoudre la bonne enum (note également qu'il existe d'autres propriétés qui ne sont pas montrés ici... ils ont trop d'évaluer correctement).
Plus tard dans le code, j'ai essayer de lire que la propriété comme cela:
LocationStatus status = location.status;
À ce point dans le code, le débogueur est en mesure d'évaluer toutes les propriétés de ma classe correctement, à l'exception Status
, qui présente une adresse de mémoire, mais pas une valeur réelle. Lors de l'exécution atteint cette ligne, j'ai toujours obtenir un EXC_BAD_ACCESS d'erreur dans la console, et l'application se bloque.
Je suis sûr que cela reflète une incompréhension fondamentale de ma part sur la façon d'utiliser les propriétés et les énumérations, en Objective-C (et probablement C en général). Si quelqu'un pouvait éclairer sur ce, je lui en serais très reconnaissant.
OriginalL'auteur | 2009-10-26
Vous devez vous connecter pour publier un commentaire.
Il pourrait être trop tard pour répondre à cela, mais j'ai remarqué une chose dans votre code. Vous êtes à l'aide de 2 variables différentes dans vous code location1 et l'emplacement (sans le 1).
EXEC_BAD_ACCESS signifie généralement que vous essayez d'envoyer un message à un objet qui n'existe pas. Généralement c'est parce qu'il a été libéré. Cependant, dans votre cas, il semble qu'il n'a jamais existé en premier lieu.
Comme vous l'avez remarqué que vous n'allouez pas un enum. Mais ce n'est pas l'enum qui est le problème. Le "point" de la syntaxe en objective-c est juste un raccourci pour envoyer un accesseur message.
Votre code est équivalent à:
Qui envoie la synthèse
-(LocationStatus)status{}
message pour les non-existant emplacement de l'objet (sauf si bien sûrlocation1
était juste une faute de frappe dans ton post, mais pas dans votre code, ce qui rend mon commentaire hors de propos). Donc il suffit de changerlocation.status
àlocation1.status
et vous devriez être bon d'aller (à moins, bien sûr,location1
est d'être libéré avant d'envoyer le message).OriginalL'auteur
EXC_BAD_ACCESS signifie presque toujours que vous essayez d'utiliser une référence à un objet qui a été libéré (généralement un communiqué de bug). Recherche pour l'erreur ici AFIN de trouver beaucoup de conseils sur le suivi vers le bas.
Ma première pensée serait que la chose qui est expiré est le contenu de votre emplacement variable dans cette mission. Mais le tour sur les zombies, et vous pouvez le voir, c'est sûr!
OriginalL'auteur