Objectif C – Impossible de travailler @ propriété / @ synthétiser des setters et des getters?

Je sais que c'est une question de débutant mais je ne peux pas comprendre ce que je fais (ou vraiment, je ne peux pas le faire fonctionner)

donc j'ai dans mon .h

@interface NSSsortingng *test; @end; @property NSSsortingng *test 

et dans mon .m

 ... @synthesize test; ... 

mais je veux un setter personnalisé pour le test – quelle est la syntaxe correcte?

Merci

Premièrement, vous n'avez pas besoin de déclarer un test variable si vous avez l'intention de faire une @synthesize , mais si vous le faites, vous devez le mettre entre accolades.

Deuxièmement, la déclaration de la propriété doit être dans l'interface:

 @interface { NSSsortingng *test; } @property (readwrite) NSSsortingng *test @end; 

Enfin, la syntaxe pour le setter est

 -(void)setTest:(NSSsortingng*)test { ... } 

Si vous choisissez de surcharger le getter également, la convention est

 -(NSSsortingng*)test { return test; } 

Simple créer une méthode avec la définition

 - (void) setTest:(NSSsortingng*) new_value 

C'est la méthode qui sera appelée lorsque vous tenterez de modifier la valeur de la propriété de test (vous pouvez modifier cela en fonction des autres noms de propriété).

Souvenez-vous que cette méthode ne sera appelée que lorsque vous tenterez de modifier self.test (la propriété) – si vous modifiez directement la variable de test, cela n'appelle pas setTest. C'est une bonne pratique de nommer votre variable non-propriété quelque chose d'autre (précéder d'un _test soulignement est commun), et ont votre instruction synthesize s'y référer:

 @synthesize test = _test; 

Cela aura access à self.test get la valeur de _test, et en modifiant self.test appelez votre méthode setTest. Si vous voulez replace le getter, ceci a la définition

 - (NSSsortingng*) test 

Si votre setter personnalisé a un nom de méthode différent de setTest: (en supposant que le nom de la propriété soit test ), vous pouvez spécifier le setter en utilisant:

 @property(readwrite,setter=setShokolokobangoshay:) NSSsortingng *test; 

Alors si vous avez:

 object.test = @"SomeValue"; 

Il va automatiquement "traduire" en:

 [object setShokolokobangoshay:@"SomeValue"]; 

Sinon, vous pouvez simplement fournir une méthode setTest: et elle sera automatiquement utilisée comme setter pour la propriété, même si vous utilisez la directive @synthesize (dans ce cas, la directive @synthesize implémentera seulement un getter).