18 Stimmen

Zugriff auf Methode aus anderen Klassen Objective-C

Ich habe nach einer Antwort auf diese Frage gesucht, aber noch keine passende gefunden. Ich hoffe, ihr könnt mir weiterhelfen! (Dies ist für eine iPhone-App)

Also gut, ich habe eine Mutliview-Anwendung. Jede Ansicht hat ihre eigene Klasse, und alles ist gut. Allerdings rufen die verschiedenen Klassen manchmal die gleiche Methode auf. Bis jetzt habe ich diese Methode einfach zweimal geschrieben, in beiden Klassendateien.

Das ist es, was ich tun möchte:

Ich möchte eine neue Klasse in einer eigenen Datei erstellen, die alle "gemeinsamen" Methoden enthält. Wenn dann eine andere Klasse die Methode aufrufen muss, rufe ich sie einfach aus der anderen Datei auf. Auf diese Weise, wenn ich die Methode ändern möchte, brauche ich sie nur an einer Stelle zu ändern, und nicht an allen Stellen...

Ich bin mir nicht sicher, wie ich das machen soll, deshalb bitte ich um Hilfe. Ich bin ein wenig eingerostet und neu in Objective-C, also werden mir schöne Beispiele sehr helfen. Erlauben Sie mir, Ihnen eines zu geben.

Datei: ViewController1.m

@implementation ViewController1

//Do Some awesome stuff....

CALL "CommonMethod" HERE

@end

Datei: ViewController2.m

@implementation ViewController2

//Do Some awesome stuff....

CALL "CommonMethod" HERE

@end

Datei: CommonClass

@implementation commonClass

- (void)CommonMethod:(id)sender
{

//So some awesome generic stuff...

    }
@end

Ich glaube, ich muss die andere Datei #importieren, ein Objekt aus der Klasse erstellen und die Methode aus dem Objekt aufrufen... Wie kann ich das tun?

Nochmals vielen Dank!

1voto

Niels Castle Punkte 7951

Übergeben Sie einen Verweis auf Ihre commonClass, wenn Sie Ihre Ansichten zuweisen und initiieren...

CommonClass *cc = [[CommonClass alloc] init];

ViewController1 *vc1 = [[ViewController1 alloc] ... initWith:cc];
ViewController2 *vc2 = [[ViewController2 alloc] ... initWith:cc];

aber ein klassisches C-Include könnte ausreichen.

0voto

David Punkte 920

Als iPhone-Neuling mit einem Java-Hintergrund und wenig C hatte ich ein ähnliches Problem, das auf eine Methode sowohl im RootController als auch in einem ViewController verweisen wollte. Es schien mir, dass der richtige Ort für die Methode die AppDelegate-Klasse war, deren Instanz man in anderen Klassen durch erhält:

MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];

dann, wenn die Methode "doSomething" ist, greift man mit darauf zu:

[delegate doSomething];

Aber vielleicht ist das zu offensichtlich oder nicht das, was verlangt wurde.

0voto

Eine weitere Methode, die Sie anwenden können

@interface ServerManager : NSObject

+(ServerManager *)getInstance;

@implementation ServerManager

+(ServerManager *)getInstance
{
static ServerManager *objServerManager = nil;

if(objServerManager==NULL){
objServerManager=[[self alloc] init];
}
// Return the servermanager object.
return objServerManager;
}

Aufruf Ob Sie die

ServerManager *SMObject =   [ServerManager getInstance];

Vergessen Sie nicht, die Datei servermanager.h zu importieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X