2010-10-28 18 views
0

Ok donc je veux -roughly- ce code:Envoi d'un pointeur vers une propriété d'interface en Objective-C

test1.m:

Foo *foo = [[Foo alloc] init]; 
foo.x = 1.0f; 

[staticClass bar:*foo.x]; 

staticClass.m:

-(void)bar:(float *)argVar 
{ 
    *argVar += 1.0f; 
} 

Donc je pointe l'argVar vers une propriété de la classe Foo. Obivously le code actuel ne fonctionne pas.

Quelle est la syntaxe appropriée pour/comment faire cela?

+0

il ne devrait pas être '- (void) bar: (float *) argVar', il devrait être '+ (void) bar: (float *) argVar' –

Répondre

1

Je pense que la bonne façon de le faire est la suivante:

float tmp = foo.x; 
[staticClass bar:&temp]; 
foo.x = tmp; 

et StaticClass.m devrait ressembler à ceci:

+(void) bar:(float *) argvar // < not plus instead of minus, denotes static method 
{ 
    *argVar = 1.0f; 
} 
1

est une propriété de Foo, pas une variable. Une propriété est juste un raccourci pour une paire de méthodes get/set. Il n'a pas d'adresse en tant que telle et ne peut donc pas être transmis comme vous essayez de le faire.

Le plus simple travail autour est de passer par une variable locale:

float d = foo.x; 
[staticClass bar:&d]; 
foo.x = d; 

Notez également que vous utilisez &, pas *, de prendre l'adresse d'une variable.

+0

Ils sont des flotteurs, pas des doubles :) –

+0

Oops! fixé. :-) –

+0

Fonctionne comme un charme! Merci :) – Art

0

Options:

  • changement Foo tel qu'il possède une propriété float *
  • changement +[staticClass bar:] telle qu'elle prend et retourne un flotteur, la mise à jour de votre code client en conséquence
  • utilisation ivar_getOffset pour trouver l'emplacement de l'instance de soutien variable de x dans votre Foo exemple