So rufen Sie eine Funktion aus einer anderen Klassendatei auf

8

Ich bin mit VB-basierten Anwendungen sehr vertraut, bin aber neu in Xcode (und Objective C). Ich habe zahlreiche Tutorials im Web gelesen und verstehe die Grundlagen und die Interaktion mit Interface Builder usw. Ich habe jedoch Probleme mit einigen Grundbegriffen der C-Sprache und wäre dankbar für jede Hilfe, die Sie anbieten können. Heres mein Problem ...

Ich habe eine einfache iPhone App, die einen View-Controller (FirstViewController) und eine Unteransicht (SecondViewController) mit zugehörigen Header- und Klassendateien hat.

Im FirstViewController.m ist eine Funktion definiert

%Vor%

Es spielt keine Rolle, was die Funktion ist.

Ich möchte diese Funktion in meinem SecondViewController verwenden, also importiere ich in SecondViewController.m FirstViewController.h

%Vor%

In dieser letzten Zeile ist mein Problem. XCode teilt mir mit, dass FirstViewController möglicherweise nicht auf writeToServer reagiert. Und wenn ich versuche, die Anwendung auszuführen, stürzt es ab, wenn diese Funktion aufgerufen wird.

Ich denke, ich verstehe nicht vollständig, wie man Funktionen teilt und, noch wichtiger, die Beziehung zwischen Klassen.

In einer idealen Welt würde ich eine globale Klasse erstellen, in die ich meine Funktionen einfügen und sie nach Bedarf aufrufen kann.

Jeder Rat wurde dankbar angenommen.

    
Guy Parker 23.04.2010, 07:40
quelle

6 Antworten

31

In der Deklaration Ihrer Methode:

%Vor%

Das - am Anfang der Deklaration zeigt an, dass es sich um eine sofortige Methode handelt. Dies bedeutet, dass Sie eine Instanz Ihrer Klasse erstellen müssen, um sie aufzurufen. Wenn es ein + wäre, wäre die Methode eine Klassenmethode und Sie könnten sie so nennen wie in Ihrem Code.

Beispiel:

%Vor%

Dann in einer Funktion:

%Vor%     
gammelgul 23.04.2010 07:50
quelle
4

In der Zeile:

%Vor%

... Sie senden die Nachricht writeToServer: an die Klasse FirstViewController . Stattdessen müssen Sie es an ein FirstViewController Objekt senden. Dies bedeutet, dass Sie eine Referenz auf ein FirstViewController -Objekt erhalten und dann das -Objekt an die Nachricht writeToServer: senden müssen:

%Vor%

Da jedoch immer nur eine Ansicht auf dem iPhone aktiv ist, sollten die Objekte FirstViewController und SecondViewController nicht gleichzeitig vorhanden sein und miteinander kommunizieren. Stattdessen sollten Sie unabhängige Klassen erstellen, um die erforderliche Klasse auszuführen, und der aktive Ansichtscontroller sollte mit diesen Klassen interagieren.

Hinweis : "Sie senden die Nachricht sayHello: an das Objekt myObject " ist nur eine andere Art zu sagen "Sie rufen die Methode writeToServer: auf des Objekts myObject . (Eine "Methode" ist wie die objektorientierte Version einer Funktion.)

Ich würde empfehlen, das Lernziel-C und Lernt Cocoa II Lernprogramme auf Cocoa Dev Central , um mehr über Cocoa / Objective-C und objektorientierte Programmierung .

    
Steve Harrison 23.04.2010 07:55
quelle
2
  1. In Ihrer FirstViewController.h -Datei müssen Sie writeToServer als Methode von FirstViewController object im Abschnitt @interface deklarieren

    %Vor%
  2. Zweitens ist die folgende Nachricht, die Sie senden, ungültig, da FirstViewController writeToServer keine Klassenmethode ist und nur gültig ist, wenn sie von einer Instanziierung der Klasse FirstViewController aufgerufen wird.

    %Vor%

Oder so ähnlich.

    
gnasher 23.04.2010 07:53
quelle
1

Sie müssen schreiben:

%Vor%

in Ihrer FirstViewController.h-Datei. Dies ist ein Hinweis für den Compiler, dass die Funktion für diese bestimmte Klasse verfügbar ist. Ihr Code würde immer noch ohne das funktionieren, da die tatsächliche Funktion implementiert wird, aber Sie erhalten die Warnung, da der Compiler die M-Datei für vorhandene Funktionen nicht überprüft, wenn Sie den Header aus einer anderen Quelldatei einschließen.

    
Mihai Damian 23.04.2010 07:49
quelle
0

Wenn Sie diese Methode wie diese aufrufen möchten, deklarieren Sie nur die Methode writeToServer als Klassenmethode (kurz: statische Methode ...)

dafür haben Sie deklarieren und definieren Sie es wie

%Vor%

einziger Unterschied ist + Zeichen anstelle von -

  • sign zeigt an, dass die Methode Klassenmethode (statisch) ist und - Zeichen ist zum Beispiel Methode (nicht statisch)

Die zweite Option erstellt eine Instanz von FirstViewController und ruft die bestehende Methode

auf

d. h.

%Vor%     
mihir mehta 23.04.2010 07:51
quelle
0
  

FirstViewController.h

%Vor%
  

FirstViewController.m

%Vor%
  

SecondViewController.h

%Vor%
  

SecondViewController.m

%Vor%     
Nischal Hada 10.05.2015 03:47
quelle

Tags und Links