2010-02-13 7 views
0

Je suis nouveau à Obj-C, et j'ai une classe, avec une variable d'une classe, et j'ai une fonction qui n'est pas dans une classe que j'ai besoin d'appeler une fonction de la variable du premier à partir de, quand la première classe appelle la fonction. Cest écrit tout faux, mais je ne sais pas les bons mots si:Appelez la fonction de classe obj-c d'une autre classe

Root.h:

@interface Root { 
    UITableView *tableview; 
} 
@property (nonatomic,retain) UITableView *tableview; 
@end 

J'ai une fonction (Root est un delagate, il est appelé, et appelle une autre fonction, non dans une classe ou quoi que ce soit:

void Search() 
{ 
    //here I need to call a function, I dont know how. If I was in Root.m, it would be 
    //[self.tableview reloadData]; 

Mais ici, je ne sais pas comment l'appeler, ive essayé passer Rechercher un pointeur vers une fonction dans Root.m qui appelle la fonction:

-(void) update { 
    [self.tableview reloadData]; 
} 
-(void) anotherFunction { 
    Search(update); 

ou

Search(self.update); 

etc mais il a toujours des erreurs là-bas, j'ai essayé aussi passer un pointeur (auto) à la recherche, et d'appeler

[pointer.tableview reloadData]; 

mais que les erreurs quand je le lance:

unrecognized selector sent to instance 0x3detc 

Comment procéder?

(désolé si cela était très confus)

Répondre

0

laissez-moi donc obtenir ce droit: vous avez une classe Root et une instance de cette classe myRoot. Dans la classe, il existe deux fonctions -update et -anotherFunction. Vous avez également une fonction C search(). Lorsque dans -anotherFunction, vous souhaitez appeler search() et, à partir de là, rappeler -update dans l'instance d'origine de root.

Si tout cela est correct, supposons que vous avez entré -anotherFunction en appelant [myRoot anotherFunction];. Nous supposerons également que tout est dans le même fichier ou que tous les fichiers ont été correctement édités #import ou #include d. Vous devez définir search() comme void search(id callback). Dans -anotherFunction appel search() comme ceci: search(self). Ensuite, dans search(), vous pouvez appeler le [callback update]; pour appeler le -update à partir de l'instance de classe à l'origine de l'exécution -anotherFunction.

Je pense que cela répond à votre question. N'hésitez pas à demander des éclaircissements.

0

Je ne suis pas sûr que je vous comprends bien, mais si vous voulez appeler une fonction définie dans une classe à l'extérieur de la classe vous suffit de créer une instance de la classe Si c'est une méthode d'instance et que vous l'utilisez comme receveur, ou si c'est une méthode de classe, vous utilisez la classe elle-même comme receveur. En d'autres termes, supposons que je veuille appeler la méthode someFunction qui est une méthode d'instance de SomeClass. Voici ce que j'ai besoin de faire:

SomeClass *someClass = [[SomeClass alloc] init]; 
[someClass someFunction]; 

S'il s'agit d'une fonction de classe, il n'est pas nécessaire d'instancier une instance d'objet. Je ne simplement ceci:

[SomeClass someFunction]; 
+0

Oui. mais ne serait-ce pas créer une autre instance de cette classe? Cela ne fonctionne pas, et donne la même erreur que le passage d'un pointeur à la classe. – zacaj

+0

Votre méthode de recherche semble également être en C au lieu d'Obj-C. Bien que cela soit certainement acceptable, y a-t-il une raison de ne pas le coder en tant qu'objectif C? – ennuikiller

+0

Je n'aime pas Obj-c, mais surtout parce que la méthode de recherche est supposée être multi-plateforme, et je ne veux pas avoir à la réécrire si une plateforme ne supporte pas obj-c. Il est quand même déclaré dans un fichier mm, car sinon il ne compilera pas. – zacaj

Questions connexes