2010-12-28 24 views

Antwort

1

nehmen, was es ist, dass Ihre doSomethingMethode (nicht Funktion) tut und es verwendet, Verfahren in einer neuen Klasse zu erstellen. Beide Controller können die Klasse importieren, instanziieren und die Methode verwenden.

Alternativ können Sie eine Benachrichtigung an den Controller senden, der doSomething hat, aber wenn der Code in der Methode wirklich auf beide Controller zutrifft, stellen Sie ihn beiden Controllern zur Verfügung.


Sie können einen Controller eine Benachrichtigung an einen anderen senden lassen. Wenn Sie Klasse benachrichtigen möchten 1 die Taste-gedrückt-Code ausführen erhalten Sie eine Benachrichtigung wie folgt senden:

[[NSNotificationCenter defaultCenter] postNotificationName:@"ABCPerformButtonAction" 
               object:nil]; 

Sie müssen es nicht nennen ABCPerformButtonAction, müssen Sie nur eine Zeichenfolge, die werden Sie erkennen und etwas - ich habe ABC verwendet, weil ich Ihre Initialen oder den Namen der App oder was auch immer nicht weiß - um sicherzustellen, dass Sie nicht versehentlich eine Benachrichtigung mit demselben Namen wie eine Benachrichtigung senden, die Ihnen unbekannt ist auf das Sie achten (einschließlich Bibliotheken von Drittanbietern, die Sie verwenden, usw.).

Wenn diese Benachrichtigung ausgeht, führt jedes Objekt, das sich beim defaultCenter registriert hat, um auf @ "ABCPerformButtonAction" zu warten, alle von Ihnen ausgewählten Aktionen aus. Hier ist, wie Controller 1 Register (dies sollte in einem Ort wie ViewDidLoad oder die Initialisierung Methode des Objekts befindet):

[[NSNotificationCenter defaultCenter] addObserver:self 
            selector:@selector(performDoSomething:) 
             name:@"ABCPerformButtonAction" 
             object:nil]; 

Der Wähler gibt, performDoSomething :, ist nur der Name einer Methode, die Sie ausführen möchten, wenn Die Benachrichtigung erlischt. Diese Methode muss ein bestimmtes Format haben, sodass Sie Ihre doSomething-Methode nicht direkt aufrufen können. Es würde so aussehen:

- (void)performDoSomething:(NSNotification *)notif { 
    [self doSomething]; 
} 

Wie Sie sehen können, ist alles, was es tut, die Methode aufzurufen. Offensichtlich könnte es viel mehr tun, und Sie können sogar Informationen zusammen mit der Benachrichtigung senden (siehe unten).

Schließlich ist es wichtig, dass Sie auch Ihr Objekt als Beobachter entfernen, bevor es freigegeben wird. In Ihrer Dealloc-Methode für jedes Objekt, das für den Empfang der Benachrichtigung registriert wurde, fügen Sie Folgendes hinzu:

Hoffentlich macht das Sinn. Die Apple documentation for NSNotificationCenter erklärt mehr und sie bieten mehrere Beispiel-Apps, die Benachrichtigungen verwenden.

+0

Methode richtig :). aber es ist ein bisschen komplizierter. lassen Sie mich erklären. In der zweiten Klasse habe ich eine Methode, um einige Einstellungen in einem nsarray zu speichern und in einem plist zu speichern (alles passiert, wenn auf eine Schaltfläche geklickt wird). Wenn ich von der zweiten Ansicht zur ersten Ansicht zurückwechsle, muss ich diese Einstellung direkt verwenden, ohne etwas zu tun. Also möchte ich Code in die Methode in der zweiten Klasse einfügen, um eine Methode in der ersten Klasse aufzurufen, die die Einstellungen erhält. – user556541

+0

Ok, ich habe eine Erklärung hinzugefügt, wie man eine Benachrichtigung sendet, die das macht, was Sie wollen. –

+0

Hast du das versucht? –

Verwandte Themen