2011-01-04 11 views
1

Ich habe eine SingletonClass, die nur eine Instanz hat. Ich möchte es erweitern und eine Kategorie hinzufügen (MoreFeatures).Kategorien & Singelton in Kakao

habe ich eine Quelle SingletonClass + MoreFeatures, die Schnittstelle/Implementierung so aussieht:

@interface SingletonClass (MoreFeatures) 

- (void) feature; 

@end 

@implementation SingletonClass (MoreFeatures) 
- (void) feature 
{ 
} 
@end 

Wenn ich meine SingletonClass erstellt ich in Kakao der Apple Beispiel Singleton Umsetzung gefolgt.

Diese Singleton befindet sich in einem Projekt B, die eine Abhängigkeit eines größeren Projektes A. ist ich für [[SingletonClass sharedInstance] foo] von einer Quelle in Projekt A nennen kann und es funktioniert in dem Fall, dass foo funktionieren in SingletonClass Schnittstelle/Umsetzung befindet. Wenn ich versuche, [[SingletonClass sharedInstance] feature] von einer Quelle in Projekt A aufzurufen, bekomme ich einen Absturz, der besagt, dass es kein Methodenfeature für die Klasse SingletonClass gibt ...

Warum passiert das?

Vielen Dank,

Nava

EDIT: Der Absturz in einer Laufzeit geschieht. Die Kategorie-Datei Quelle befindet sich in Projekt B zusammen mit einer SingletonClass

+0

Sie meinen, einen Compiler Absturz oder einen Laufzeit Absturz ?, Wo sehen Sie Ihre Kategorie haben ?, ist es auf Projekt A oder auf Projekt B? – HyLian

+0

Laufzeitabsturz. Die Kategorie befindet sich in Projekt B, in dem sich die Hauptklasse befindet. –

+0

möglich Duplikat von [Objective-C Category Import seltsames Verhalten] (http://stackoverflow.com/questions/1099561/objective-c-category-import-strange-behavior) –

Antwort

0

Sie müssen die Flags -all_load und -ObjC Linker für Ihr Projekt angeben.

hoffe, das hilft, Moszi

+0

danke, gestern habe ich meine eigene Antwort darauf mit einem Link zu einer ähnlichen SO-Frage, die einen Link zu Apple technischen Fragen und Antworten mit detaillierten Erklärung des Problems enthält. Übrigens heißt das Flag -all_load oder -force_load. Bitte korrigieren Sie Ihre Antwort und ich werde es als richtig überprüfen –

+0

Danke für die Korrektur :) - Ich habe meine Antwort aktualisiert! – Moszi

0

Es klingt wie Ihre Kategorie-Implementierung wird nicht kompiliert, wenn Sie Projekt A erstellen. Diese Art von Sache ist definitiv möglich, Foundation/AppKit/UIKit machen stark Gebrauch von Kategorien, um große Klassen auf mehrere Dateien aufzuteilen.

Sie machen nicht klar, wie Ihr Projekt B in Projekt A enthalten ist. Wenn es ein Framework, eine freigegebene oder statische Bibliothek ist, dann stellen Sie sicher, dass Ihre Kategorie-Datei in der Build-Phase "Kompiliere Quellen" des Projekts B enthalten ist. Wenn es als Quelle enthalten ist, stellen Sie sicher, dass Sie diese Datei als Teil des Projekts A Build kompilieren.

+0

danke für den versuch zu helfen. Ich überprüfte. Projekt B ist eine statische Bibliothek und die Kategorie categories ist in der Kompilierquellen-Erstellungsphase enthalten. Projekt A verknüpft die statische B-Bibliothek, aber Quellen von B sind in einer Erstellungsphase von Projekt A nicht enthalten. Ich importiere die .h-Datei von SingletonClass + MoreFeatures.h in einer Quelldatei in Projekt A, wenn ich ihre Funktionen verwenden möchte . –

+0

@Nava also, wenn Sie 'class-dump' auf der statischen Bibliothek ausführen, findet es Ihre Kategorie? http://www.codethecode.com/projects/class-dump/ –

+0

klingt wie ein großartiges Werkzeug, aber ich kann es nicht mit dieser Bibliothek aus irgendeinem Grund ausführen. Die Bibliothek ist eine statische .a-Bibliothek der arm6, arm7-Architektur. versuchen zu laufen ./class-dump libiProjectB.a gibt eine Nachricht: Eingabedatei (libiProjectB.a) ist weder eine Mach-O-Datei noch ein Fett-Archiv. Aber ich habe einen nm-Befehl darauf ausgeführt und er sieht SingletonObject (MoreFeatures) als eine Kategorie von SingletonObject. Ich habe genau die gleiche Situation in Projekt A (ein anderes Singleton-Objekt mit Kategorien) und es funktioniert perfekt. –