"nicht erkannter Selektor an Klasse gesendet" beim Aufrufen der Kategoriemethode aus einer Bibliothek

8

Problem

Diese Frage mag ein bisschen lang erscheinen, aber ich versuche so viele Informationen wie möglich zu geben, da ich davon wirklich sehr erschüttert bin.

Ich arbeite derzeit an einer Bibliothek , die das Parsen von XML-Dokumenten automatisieren soll. Aber ich stoße jetzt auf ein Problem und teste die Bibliothek zum ersten Mal.

Ich habe eine Bibliotheksklasse namens CSXDocumentLayout , die das Layout eines Dokuments darstellt. Diese Klasse enthält die private Methode - (NSError *)readLayoutDocument:(NSString *)fpath , die von einer init-Methode aufgerufen wird.

%Vor%

Diese Methode liest ein XML-Dokument ein, das das Layout eines anderen XML-Dokuments darstellt. Es wird von der Klasse CSXXMLParser analysiert, die ich testen möchte.

Ich erstelle ein Objekt, das ein Layoutdokument mit +[CSXDocumentLayout layoutDocumentLayout] darstellt. Diese Methode ist in der Kategorie CSXDocumentLayout (CSXLayoutObject) implementiert.

Unten ist meine Testdatei:

%Vor%

Diese Datei wird in eine separate ausführbare Datei kompiliert, die mit meiner statischen Bibliothek libceasyxml.a verknüpft ist. Alles kompiliert gut ohne Warnungen.

Aber wenn ich es ausführe, bekomme ich einen nicht erkannten Selektor an die Ausnahme gesendet:

%Vor%

Ich finde es sehr beunruhigend, dass ich die Klassenmethode +[CSXDocumentLayout(CSXLayoutObject) layoutDocumentLayout] nicht aufrufen kann, obwohl ich sowohl -[CSXDocumentLayout initWithLayoutDocument:error:] als auch -[CSXDocumentLayout(Private) readLayoutDocument:] aufrufen kann.

Forschung

Ich habe überprüft, ob die Methode in den Ausgabedateien definiert ist, indem ich nm file ausfühle und es ist gut, teilweise:

In libceasyxml.a ist (nm libceasyxml.a)

definiert %Vor%

In TestApp ist es NICHT definiert (nm TestApp) , tatsächlich kann ich keine Methode mit dem Kategorienamen CSXLayoutObject finden.

%Vor%     
v1Axvw 02.05.2012, 15:24
quelle

2 Antworten

26

Ich vermute, dass Sie auf ein bekanntes Problem von Kategorien stoßen, die in statische Bibliotheken eingebettet sind .

Wenn ich Recht habe, versuche mit den Linkerflags -ObjC zu kompilieren (und wenn das nicht genug ist, auch -all_load ) und dein Problem sollte verschwinden.

    
sergio 02.05.2012, 15:33
quelle
3

Obwohl die Antwort bereits ausgewählt wurde, wünschte ich, die Lösung für mein Problem wäre hier, so einfach es auch sein mag. Stellen Sie sicher, dass Ihre Klasse im Feld " Target Membership " im Bereich " File Inspector " ordnungsgemäß überprüft wurde. Wenn Sie dies nicht tun, ist es nur natürlich, den Fehler unrecognized selector sent to class zu erhalten.

    
Oscar 29.05.2015 20:13
quelle
Django: Verwenden von Annotate, Count und Distinct in einem Queryset ___ answer15997288 ___

Mit JQuery Mobile 1.3 müssen Sie jetzt die Klasse "ui-nodisc-icon" hinzufügen, ohne sich mit CSS herumärgern zu müssen.

von der JQuery-Website :

"Wenn Sie den dunklen Kreis hinter den Symbolen nicht benötigen, fügen Sie einfach das ui-nodisc-Symbol zum Element oder seinem Container hinzu , um den Symbolhintergrund zu entfernen."

    
___ qstntxt ___

Ich baue meinen ersten Phonegap Jquery Appl Ich ändere mein Icon mit dieser Klasse

%Vor%

Dieses benutzerdefinierte Symbol ist für eine Listenansicht, und ich versuche, die runde graue Hintergrundlast zu entfernen Auch mein Bild ist ein bisschen groß für die Form Ich habe mit dem .ui-Icon gespielt, funktioniert aber nicht Kann die Klasse nicht finden

Ich möchte nur meine benutzerdefinierte Pfeil Bild in voller Größe auf einem weißen Hintergrund Liste keine runde keine Kreis-Box-Form Vielleicht gibt es ein Attribut oder über CSS, um das zu machen Danke

    
___ answer10771844 ___

Das sollte funktionieren.

%Vor%     
___ answer17078486 ___

Für diejenigen von euch, die nur ein Icon für den Button haben wollen - ich fand diesen Artikel sehr nützlich! Ich folgte den "Reset the button theme" und "Icon-only buttons" Abschnitten, um den gewünschten Effekt zu erzielen.

Ссылка

    
___ answer34898198 ___

Ich löste dieses Problem mit:

%Vor%

Wenn Sie Farbe im Hintergrund hinzufügen möchten, können Sie verwenden:

%Vor%     
___ tag123jquerymobile ___ jQuery Mobile ist ein touch-optimiertes Web-Framework für Smartphones und Tablets. Es bietet ein einheitliches Benutzeroberflächensystem für alle gängigen mobilen Geräteplattformen, die auf jQuery basieren. ___ tag123icons ___ Ein Icon ist ein kleines Piktogramm, das in grafischen Benutzeroberflächen verwendet wird, um die Darstellung von Textinformationen für den Benutzer zu ergänzen. ___ answer10771853 ___

Überschreibt die Farbe der Symbol-Disc auf Weiß.

%Vor%

Die Symbolgröße wird in %code% class angegeben, standardmäßig auf %code% .

%Vor%     
___ answer21635487 ___

Wenn Sie jQuery v 1.4.0 + verwenden, müssen Sie nur die Klasse %code% zu Ihrem Verknüpfungselement hinzufügen, um diesen störenden Kreis zu entfernen. Sie müssen kein CSS bearbeiten oder irgendwelche Überschreibungen schreiben.

    
___ answer11845655 ___

Spät zur Party hier, aber eine einfache Antwort ist

hinzuzufügen %Vor%

zu Ihrem benutzerdefinierten Klassennamen, also:

%Vor%

ist alles was du brauchst.

    
___