Okay, das könnte eine sehr alberne Anfängerfrage sein, aber:Wie kann ich dieses Problem mit bidirektionalen Abhängigkeiten in Objective-C-Klassen lösen?
Ich habe eine ClassA, die ein untergeordnetes Objekt aus ClassB erstellt und das einer Instanzvariable zuweist. Im Einzelnen: ClassA wird ClassB im zugeordneten Initialisierer zuweisen und initialisieren und dies der ChildEbject-Instanzvariablen zuweisen. Es sieht Header so aus:
#import <Foundation/Foundation.h>
#import "ClassB.h"
@interface ClassA : NSObject {
ClassB *childObject;
}
@end
Dann gibt es die Kopfzeile von ClassB. ClassB muss einen Verweis auf ClassA haben.
#import <Foundation/Foundation.h>
#import "ClassA.h"
@interface ClassB : NSObject {
ClassA *parentObject;
}
- (id)initWithClassA:(ClassA*)newParentObject;
@end
Wenn das KlasseA Objekt erstellt ein untergeordnetes Objekt von ClassB, dann ist das KlasseA Objekt den bestimmten Initialisierung des Objekts ClassB nennen, wo sie sich übergeben hat (Selbst-).
Ich fühle, dass etwas nicht stimmt, aber im Moment bekomme ich nicht genau, was es ist. Einer denke ich weiß, dass das nicht funktioniert. Sie können sich nicht gegenseitig importieren. Der Compiler sagt mir nur: "Fehler: Syntaxfehler vor 'ClassA'". Wenn ich die import-Anweisung für den Import von ClassA entferne, entferne die ClassA * parentObject-Instanzvariable und entferne den designers-Initialisierer (der ClassA-Referenz akzeptiert), dann funktioniert es.
Nun, hier ist, was ich erreichen möchte (wenn das wichtig ist): Ich brauche ein sehr spezielles und komplexes Verhalten in einem UIScrollView. Also habe ich beschlossen, es zu unterklassifizieren. Da der Hauptteil innerhalb der Delegate-Methoden ausgeführt wird, entschied ich mich, ein "generisches" Delegat-Objekt für meine Unterklasse von UIScrollView zu erstellen. Meine UIScrollView-Unterklasse erstellt dann automatisch dieses spezielle Delegatobjekt und weist es seiner Delegate-Eigenschaft zu. Das Delegat-Objekt selbst benötigt einen Verweis auf das übergeordnete Element, das benutzerdefinierte UIScrollView, damit es auf die Untersichten dieser Bildlaufansicht zugreifen kann. Aber selbst wenn es einen besseren Weg gibt, dieses Problem zu lösen, würde ich trotzdem gerne wissen, wie ich das mit zwei "voneinander abhängigen" Objekten, die einander brauchen, machen kann.
Alle Vorschläge sind willkommen!
Erinnert mich an http://stackoverflow.com/questions/820808/objective-c-cocoa-proper-design-for-delegates-and-controllers – Kriem
Ausgezeichnete, ausgezeichnete Frage. Ich habe das gerade gefunden und es beantwortet ein lang bestehendes Problem, das ich hatte. Danke auch für die tollen Antworten! –