2010-12-06 6 views
0

J'ai un NSSet objet que je veux passer dans un performSelector -call:performSelector ne passera pas l'objet au sélecteur

NSSet *myNSSetObject = [self getSet]; 

if (myNSSetObject.count != 1) 
    return; 

[self performSelector:@selector(myMethod:) withObject:myNSSetObject afterDelay:0.5]; 

Le problème est que l'objet arrive vide myMethod. Comme performSelector conserve l'objet passé, je ne comprends pas ce qui ne va pas.

Ma méthode est définie comme suit

- (void)myMethod:(NSSet *)myNSSetParam { 
    NSLog(@"Set count: %d", myNSSetParam.count); 
    [do sth]; 
} 

Le NSLog montre: nombre Set: 0


examiner plus en profondeur la question et a déjà suggéré le compte ci-dessus, l'objet NSSet est effectivement passé, mais perd son enregistrement (s).

NSSet ne conserve-t-il pas ses objets?

Répondre

1

Êtes-vous sûr que getSet retourne une réelle NSSet et non une sous-classe mutable se cachant sous un pointeur de base NSSet “ ”? S'il est mutable, il est possible que l'ensemble soit modifié dans le délai de 0,5 seconde. Même si performSelector:withObject:afterDelay: conserve l'ensemble, cela ne l'empêche pas d'être modifié.

2

Est-ce que myMethod prend un argument? Il est important de noter que les noms de méthodes et les sélecteurs dans Objective-C incluent réellement les deux-points qui sont présents dans la déclaration; Par conséquent, une méthode comme ceci:

- (void)myMethod:(NSSet *)set; 

doit être référencé avec @selector(myMethod:), y compris le côlon de fuite.

+0

Oui c'est le cas. J'ai mis à jour la question pour montrer l'appel, merci. – iFloh

0

Vous devez appeler

[self performSelector:@selector(myMethod:) withObject:myNSSetObject afterDelay:0.5]; 

à la place (notez les deux points derrière le nom du message).

+0

même que ci-dessus, était une faute de frappe (mise à jour), merci – iFloh

0

Vouliez-vous dire

[self performSelector:@selector(myMethod:) withObject:myNSSetObject afterDelay:0.5] 

En supposant myMethod: est une méthode qui prend un objet?

+0

Oui, je l'ai fait ... typo, juste mis à jour ... merci – iFloh

2

Après être revenu du premier message (ou en partie sous le code affiché), modifiez-vous accidentellement le NSSet fourni par [self getSet]? Si vous supprimez des objets de l'ensemble par la suite, myMethod: ne pourra plus y accéder.

Questions connexes