2011-06-24 5 views
0

Fondamentalement, je veux appeler une fonction d'une classe principale dans une sous-classe à laquelle la classe principale détient un pointeur.
Je sais que je peux juste obtenir la classe principale pour initier la sous-classe et y attacher la fonction. Mais je ne le veux pas, je veux que la sous-classe s'initie avec sa fonction init.
Est-ce que je peux appeler quelque chose de someClass?
Certains code de base pour montrer ce que je veux:
En MainViewController.h:Comment appeler une fonction de classe à partir d'un objet de la classe?

@class SomeClass; 

@interface MainViewController : UIViewController { 
     SomeObject *someInformation; 
     SomeClass *someInstance; 
} 
@property (nonatomic, strong) SomeClass *someInstance; 

-(void)doSomething:(id)sender; 
@end 

En MainViewController.m:

@implementation MainViewController 
@synthesize someInstance; 
-(void)doSomething:(id)sender { 
    //do something to someInformation 
} 
@end 

En SomeClass.h:

@interface SomeClass : NSObject { 
    UIStuff *outstuff; 
} 
@property (strong, nonatomic) UIStuff *outstuff; 
-(void)somethingHappened:(id)sender; 
@end 

Dans SomeClass.m

@implementation SomeClass 
@synthesize outStuff; 
-(IBAction)somethingHappened:(id)sender { 
    //call doSomething to the main class that points to this class 
} 
@end 
+0

Pourriez-vous l'expliquer mieux? Quelle fonction aimeriez-vous appeler, de quelle classe? –

+0

Je veux appeler quelque chose de SomeClass. (ajouté cela à la question) –

Répondre

2

Votre terminologie est fragile. Les classes ne "tiennent" pas d'autres classes. Dans votre cas, les instances de la classe MainViewController ont les pointeurs aux objets de la classe SomeClass. Je ne suis pas pédant; Une mauvaise terminologie comme celle-ci jette un doute sur la compréhension des concepts sous-jacents et importants. Cela dit, les objets SomeClass ont besoin d'une référence à un objet MainViewController si vous voulez qu'un objet SomeClass puisse envoyer un message à une instance de MainViewController. À partir du code que vous avez publié, aucune référence n'existe. Vous devez soit développer l'interface SomeClass pour stocker une référence explicite à un objet MainViewController, soit utiliser quelque chose de légèrement plus indirect (du moins conceptuellement) via la délégation. Toutefois, étant donné que vous n'avez pas fourni d'informations spécifiques à chaque cas, nos solutions seront formées sans aucune information détaillée.

+0

Certes, je ne connais pas vraiment la terminologie exacte bien. Je vais essayer de le réparer cependant. Je pense que ce que je cherche, c'est ce que vous avez mentionné à propos de la référence à l'envers. Pourriez-vous expliquer comment créer cette référence et ce que je peux en faire? –

+0

La principale raison pour cela est de désencombrer mon fichier MainViewController. Au lieu de faire toutes les intialisations et les fonctions dans une classe énorme, je voulais les diviser en classes plus petites en fonction de ce qu'ils font. –

+0

Après Coleman suggéré de stocker une référence, j'ai réussi à trouver un moyen de résoudre ce problème: Ajouter à SomeClass.h @property (fort, nonatomic) MainViewController * mainView; - (void) setMainView: (MainViewController *) thisMainView; Ajouter à SomeClass.m @synthesize MainView - (void) setMainView: (MainViewController *) thisMainView { MainView = thisMainView; } Appelez setMainView dans la classe principale alors vous pouvez utiliser [mainView doSomething] dans someClass J'ai posté ici parce que je ne peux pas répondre pour le moment. –

Questions connexes