Wednesday, February 1, 2017

Waitforexpectationswithtimeout Objektiv C Compiler

Installieren von Objective-C-Compiler-Setup Der Compiler Objective-C ist eine strikte Obermenge von C. Die zusätzliche Funktionalität wird durch Verknüpfen mit der Objective-C-Bibliothek beim Bauen mit dem Standard-GNU-GCC-Compiler erhalten. Dies macht die Einrichtung eines neuen Compilers sehr einfach, da wir eine Kopie des Standard-Compilers machen und die Linker-Einstellungen ändern können. Achtung: Stellen Sie sicher, dass Ihr GNU GCC Compiler korrekt eingerichtet ist, bevor Sie mit der Einrichtung von Objective-C beginnen. 1) Gehen Sie zu Settings-gtCompiler und debugger. 2) Wählen Sie GNU GCC Compiler und machen Sie eine Kopie es Namen es, was Sie wollen, aber GNU GCC Obj-C-Compiler wäre die beschreibendste. 3) Klicken Sie unter Linker-Einstellungen. Add - lobjc zu anderen Linkeroptionen, die Sie nicht explizit die Bibliothek libobjc. a hinzufügen müssen, da die Markierungsfahne gcc sagt, um sie für uns einzuschließen. Hinzufügen von Filetype-Unterstützung 1) Gehen Sie zu Einstellungen-gtEnvironment. 2) Wählen Sie Dateien Erweiterung Handhabung und hinzufügen. M 3) Gehen Sie zu Project-gtProject tree-gtEdit-Dateitypen amp Kategorien. 4) Unter Quellen. Hinzufügen. m zur Liste der Dateitypen. Korrekte Syntax-Hervorhebung 1) Gehen Sie zu Einstellungen-gtEditor. 2) Wählen Sie Syntaxhervorhebung und gehen Sie zu Dateimasken. . Fügen Sie der Liste der Dateitypen. m hinzu. 3) Gehe zu Schlagwörtern. (Neben Filemasks.) Und erstellen Sie einen neuen Satz (Pfeil nach oben). Fügen Sie dies dem Schlüsselwort: box: Optionale Änderungen 1) Gehen Sie zu Einstellungen-gtCompiler und dubugger. 2) Klicken Sie unter Andere Einstellungen. Ändern Sie Compilerprotokollierung auf Vollständige Befehlszeile. Wenn ObjC immer noch nicht ordnungsgemäß für Sie arbeitet, können Sie dies verwenden, um die Befehlszeilenargumente zu vergleichen, die C :: B gegen die Befehle verwendet, die Sie verwenden würden, wenn Sie das Programm manuell in der Befehlszeile aufbauen würden. 3) Klicken Sie unter Andere Einstellungen. Gehen Sie zu Erweiterte Optionen. Für Link-Objekt-Dateien zu ausführbaren und Link-Objekt-Dateien zu Konsole ausführbare Datei. Move - o exeoutput an das Ende der Makros. Aus Gründen außerhalb meines Verständnisses, wird GCC manchmal (wenn auch nur selten) beschweren, während komplexe Builds, wenn dies nicht das letzte Argument auf der Linie. Wichtige Hinweise 1) C :: B wählt standardmäßig CPP als Standard-Compiler-Variable für eine neue Quelldatei, und die Datei wird nicht kompiliert oder mit einem Ziel verknüpft. Wenn Sie eine neue ObjC-Quelle (.m) in Ihrem Projekt hinzufügen oder erstellen, müssen Sie mit der rechten Maustaste darauf klicken und Eigenschaften aufrufen. . Unter fortgeschrittenem. Ändern Sie die Compiler-Variable in CC. Unter Build. Wählen Sie sowohl die Kompilierungsdatei als auch die Linkdatei. Bevor Sie den Dialog schließen, gehen Sie zu Allgemein und deaktivieren Sie Datei ist schreibgeschützt. Dies wird automatisch ausgewählt, wenn Sie die anderen Optionen ändern und wenn Sie das Dialogfeld schließen, bevor Sie es deaktivieren, müssen Sie zurück gehen und ändern, dann schließen und öffnen Sie die Datei im Viewer, bevor Sie es bearbeiten können. 2) Wenn Sie eine Headerdatei (.h) hinzufügen, müssen Sie auch ihr Eigenschaftsfenster öffnen und die Compilervariable auf CC ändern. Sie müssen nichts anderes tun, um es zu tun. Fehlerbehebung Eine kleine Anzahl an Fallstricken, bei denen Sie versuchen, Objective-C-Anwendungen mit TDM-GCC oder MinGW zu kompilieren, sind leider nicht gut dokumentiert. Dieser Abschnitt versucht, die aktuell identifizierten Probleme zu identifizieren und zu lösen, stellt fest, dass es sich um Probleme der aktuellen GCC 4.5.x-Verzweigung handelt, sofern nicht anders angegeben. Der GCC 4.6.x-Zweig stellt derzeit eine 4.6.x-Schnittstelle für GCC für TDM-GCCMinGW zur Verfügung, die eine völlig neue Objective-C-Bibliothek einführt, die die Implementierung von ObjC inline mit der Apples-eigenen Implementierung der Bibliothek bringt. Viele dieser Probleme werden wahrscheinlich in dieser neuesten Version gelöst. Probleme mit der gemeinsamen Bibliothek Es gab einige Probleme mit der - lobjc - Flagge, die versucht, mit libobjc. dll. a zu verknüpfen. Die seit einiger Zeit eine nicht funktionierende gemeinsame Bibliothek ist. Wenn diese freigegebene Bibliothek vor der Kompilierung nicht entfernt wird, wird gcc einen nicht definierten Verweis auf. Fehler bei jedem ObjC-Verfahren oder Bibliotheksaufruf während der Verbindungsstufe. Diese freigegebene Bibliothek muss entfernt werden, und im Fall von TDM-GCC befindet sich unter: mingw install directorylibgcctdm install typeversionlibobjc. dll. a. Wenn Sie TDM-GCC x64 installiert haben, müssen Sie auch die 32-Bit-Kopie der freigegebenen Bibliothek entfernen, die sich unter:. Version32libobjc. dll. a. BOOL Redefined Ich habe diesen Fehler ab TDM-GCC 4.5.2 erlebt, aber auf TDM-GCC 4.5.1 und früher wurde versucht, eine 32-Bit-ObjC-Anwendung zu erstellen, die auch lt windows. h gt importiert, einen BOOL neu definierten Fehler . Dies ist das Ergebnis der Windows-Header definieren ihre eigene Version von BOOL die Header machen zu überprüfen, ob ObjC verwendet wird (indem Sie überprüfen, ob OBJC definiert ist) und ändern Sie verschiedene Typen und Deklarationen, um sich kompatibel zu machen, aber die ObjC-Bibliothek nicht Definieren Sie OBJC, da es auch seine Deklarationen ändert, wenn dies bereits definiert ist. Sie können nicht einfach definieren OBJC zu Beginn eines Programms jedoch, da es ein Fehler mit libobjc. a zu erstellen verursacht wird. Der richtige Weg, um in Kompatibilität zu patch, ist das Ende von objc. h (befindet sich bei:. Versionincludeobjcobjc. h) zu ändern und es in Ihr Programm zu importieren, bevor Sie die Windows-Header importieren. Patch auf objc. h Test Build Heres ein Bare-Bones-Projekt, das Sie zusammen werfen können, um zu testen, ob Ihre C :: B-Einstellungen ObjC korrekt kompilieren. Sie können nicht testen, mit nur strengen C, da alle Probleme mit dem Objective-C-Compiler nur manifestieren, wenn mit ObjC-Funktionalität. TestObject. h TestObject. m Objective-C Bibliothekslizenzierung Im Gegensatz zu anderen Bibliotheken, die in GCC enthalten sind, kann die Objective-C-Bibliothek statisch mit einem Projekt verknüpft werden, ohne die GNU GPL auf dieses Projekt zu erweitern. Obwohl die Bibliothek unter der GNU GPL selbst abgedeckt ist, hat sie eine besondere Ausnahme in ihrer Lizenz, da sie eine notwendige Bibliothek zur Erstellung einer Sprache ist. Lizenz ExemptionI hatte das gleiche Problem. Der Fix für mich schien das Timeout-Intervall zu erhöhen. Ich hatte ursprünglich ein Timeout Intervall von 1 und erhöhte es auf 5 nur auf der sicheren Seite sein. Scheint jetzt gut zu funktionieren. Im nicht sicher, wie lang Ihr async Anruf nimmt, oder wenn Sie ein längeres Timeoutintervall als 1 leisten können, aber sein wert ein Schuß. Ich antwortete, in 50 Fällen half es. Sie können im Code sehen, den ich gepostet habe, dass async gerade Abfertigung danach ist, das 0.5s wartet. Am Ende bin ich niling die Erwartung nach Wartezeitblock und alle behauptet auch nach Warteblock. So geschieht nichts während des Wartens, sondern erfüllt. Ndash Micha Hernas Swift hat es besondere Schwierigkeiten, den richtigen Ausnahmestopppunkt zu zeigen, wenn Verschlüsse im gleichen Bereich vorhanden sind. Ive gesehen das gleiche Problem in einer XCTestCase, die dispatchafter verwendet und sogar durch den Ausnahme-Haltepunkt war die gleiche Zeile wie waitForExpectationsWithTimeout der Testfall stürzte wegen eines Downcast auf einem Null-Objekt. Ich weiß, das ist nicht dein Fall, aber wenn dies geschieht, schlage ich vor, Entfernen von Anweisungen eine Zeile zu einer Zeit und Ausführen des Tests nach jeder Entfernung. Wenn der Test nicht abstürzt, haben Sie den Täter identifiziert. Dies ist leider die beste Option zum Zeitpunkt dieses Schreibens, wenn Swift zeigt einen Ausnahme-Haltepunkt auf einer Linie, die keinen Sinn macht, vor allem die berüchtigte Linie 0 einer Klasse, die Sie möglicherweise in Crash-Reporting-Tools zu sehen. Lassen Sie uns wissen, wenn Sie Ihren Absturz herausgefunden haben.


No comments:

Post a Comment