2010-03-27 5 views
2

J'ai deux objets NSMutableString définis dans mon viewController de (une sous-classe de UITableViewController) .h:NSMutable String "Hors champ"

NSMutableString *firstName; 
NSMutableString *lastName; 

Ils sont des propriétés:

@property (nonatomic, retain) NSMutableString *firstName; 
@property (nonatomic, retain) NSMutableString *lastName; 

Je leur synthèse dans le fichier .m

Dans ma méthode de viewDidLoad - Je les réglages pour les chaînes vides:

firstName = [NSMutableString stringWithString:@""]; 
lastName = [NSMutableString stringWithString:@""]; 

prenom et nomFamille peuvent être modifiés par l'utilisateur. Dans ma méthode de cellForRowAtIndexPath, je suis en train d'afficher le contenu de ces chaînes:

cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ %@", firstName, lastName]; 

mais cela est à l'origine de l'application crash dès que le contrôleur de vue est affiché. En utilisant le débogueur, il semble que firstName et lastName sont "hors de portée" ou qu'ils n'existent pas. Je suis nouveau sur Xcode mais le débogueur semble s'arrêter à objc_msgSend.

Qu'est-ce que je fais mal?

+0

Alors, où sont les suivants: NSMutableString * prenom; NSMutableString * lastName; Défini?, au niveau du fichier, ou au niveau de la classe, ou dans la méthode? Juste pour info, vous avez eu raison d'ajouter l'objectif-c BTW, car il s'agit définitivement d'un "objectif" classique. – Wintermut3

Répondre

6

Le problème est que vous devez faire:

self.firstName = ... 
self.lastName = ... 

qui appellera les méthodes setter générées automatiquement, qui conservera les valeurs. En assignant directement, vous contournez les setters, et dès que le pool autorelease actuel est drainé les deux variables auront des pointeurs pendants.

1

faire habitude de mettre self.variableName ... et au lieu de stringWithsString essayez d'utiliser initWithString ... espérons que cela va résoudre le problème ... BTW vous avez expliqué très bien la question ...

0

Votre cellule est en cours de chargement et l'accès firstName et lastName avant qu'ils ne soient initialisés. viewDidLoad est trop tard, essayez awakeFromNib ou viewWillLoad ou quoi que ce soit sur iPhone.

+0

Cela rendrait les valeurs nulles, ce qui ne donnerait pas les chaînes attendues mais ne planterait pas non plus. – smorgan

+0

'Out of scope' n'est pas nul, cela signifie que le compilateur n'a pas encore réussi à assigner une valeur, nulle ou non, à la variable en question. –

0

Vous ne pouvez pas utiliser:

firstName = [NSMutableString stringWithString:@""]; 

Depuis qu'il désaffecter dès que viewDidLoad finitions d'exécution.

Essayez:

firstName = [[NSMutableString alloc] initWithString:@""]; 

Ou:

[self setFirstName:[NSMutableString stringWithString:@""]]; 

Et ne pas oublier de libérer firstName et lastName sur le message dealloc.

0

Quel style de cellule avez-vous utilisé?

if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
           reuseIdentifier:BasicCellIdentifier] autorelease]; 
} 

peut-être que cela vous aidera

Questions connexes