2011-04-09 4 views
0

J'ai un objet qui a un seul membre avec une propriété de type NSMutableSet appelée URL. J'ai un contrôleur de vue qui effectue cette boucle:Pourquoi mon NSMutableSet est-il vide?

NSString *link = [NSString stringWithFormat:@"document.links[%d].toString()", i]; 
NSString *links = [self.webView stringByEvaluatingJavaScriptFromString: link]; 
NSURL *URL = [[NSURL alloc] initWithString:links]; 
NSString *lastPath = [URL lastPathComponent]; 

if ([lastPath hasPrefix:comparisonString]) { 

[model.URLs addObject:links]; 

} 

NSLog(@"Count: %d", [model.URLs count]); 

Mais la fonction imprime journal 0 pour moi, et je suis certain que j'ai quelques cas où l'instruction if est vrai parce que je journal aussi bien et vois le feu à quelques reprises. Des pointeurs?

Répondre

2

Etes-vous sûr que model.URLs pointe vers un NSMutableSet valide? Si c'est nul, vous aurez toujours 0 pour le compte dans l'instruction log, et l'appel -addObject: ne fera rien.

+0

Hm. Le modèle ici est juste une sous-classe de NSObject avec un seul membre, des URL NSMutableSet * et une propriété avec des attributs nonatomic et retain. J'ai un modèle similaire avec seulement deux chaînes et cela fonctionne bien, dois-je appeler manuellement une fonction alloc/init sur le NSMutableSet dans le code alloc/init du modèle qu'un NSString pourrait ne pas avoir besoin? – cdietschrun

+0

Toute propriété doit être correctement initialisée. Si vous affectez une chaîne à votre propriété de chaîne avant d'essayer d'accéder à cette propriété, c'est l'initialisation dont vous avez besoin. De même, vous devez définir la propriété de votre URL pour qu'elle pointe vers un ensemble mutable avant de pouvoir utiliser cet ensemble; sinon, la propriété est juste un pointeur nul. C'est assez facile à vérifier - il suffit de placer un point d'arrêt sur votre déclaration NSLog et jeter un coup d'œil à la propriété URLs. – Caleb

+0

Merci, on dirait que le sous-produit de mon design a défini ces NSStrings avant d'y accéder comme vous l'avez dit, donc je vois ce qui s'est passé. Comme pour mes autres fichiers, j'ai des fichiers xib d'où proviennent les vues et les boutons, et maintenant je me rends compte qu'ils sont en cours d'initialisation dans initWithNib: ... merci! – cdietschrun