Das Hinzufügen einer (praktischen) berechneten height
Eigenschaft zu UIView
meiner UIViewExtension.swift
Datei führt dazu, dass der Swift-Compiler fehlerhaft wird ... Was könnte hier möglicherweise schief gehen?
0 swift 0x00000001061e5608 llvm::sys::PrintStackTrace(__sFILE*) + 40
1 swift 0x00000001061e5af4 SignalHandler(int) + 452
2 libsystem_platform.dylib 0x00007fff894da5aa _sigtramp + 26
3 libsystem_platform.dylib 0xb03939841e997c88 _sigtramp + 2504775416
4 swift 0x00000001064c8bb9 swift::NominalTypeDecl::getMembers(bool) const + 41
5 swift 0x00000001055efab9 swift::irgen::ClassMetadataLayout<(anonymous namespace)::FindClassMethodIndex>::addClassMembers(swift::ClassDecl*) + 329
6 swift 0x00000001055e97b2 swift::irgen::emitVirtualMethodValue(swift::irgen::IRGenFunction&, llvm::Value*, swift::SILType, swift::SILDeclRef, swift::CanTypeWrapper<swift::SILFunctionType>, swift::ResilienceExpansion) + 434
7 swift 0x00000001056550d3 swift::SILVisitor<(anonymous namespace)::IRGenSILFunction, void>::visit(swift::ValueBase*) + 42611
8 swift 0x000000010564a266 swift::irgen::IRGenModule::emitSILFunction(swift::SILFunction*) + 8678
9 swift 0x00000001055cb6f8 swift::irgen::IRGenModule::emitGlobalTopLevel() + 184
10 swift 0x00000001056376e3 performIRGeneration(swift::IRGenOptions&, swift::Module*, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, swift::SourceFile*, unsigned int) + 1859
11 swift 0x0000000105638033 swift::performIRGeneration(swift::IRGenOptions&, swift::SourceFile&, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, unsigned int) + 51
12 swift 0x00000001055aa65a frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 4842
13 swift 0x00000001055a935d main + 1533
14 libdyld.dylib 0x00007fff8a82e5fd start + 1
1. While emitting IR SIL function @_TFCSo6UIViewg6heightSd for 'anonname=0x7ff422892fd0' at <path redacted>/UIViewExtension.swift:60:5
<unknown>:0: error: unable to execute command: Segmentation fault: 11
<unknown>:0: error: swift frontend command failed due to signal (use -v to see invocation)
Command /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift failed with exit code 254
Wenn weitere Informationen benötigt werden, um dies zu knacken, kommentieren Sie einfach. Vielen Dank!
Bearbeiten:
Hier ist eine verwandte .xcodeproj, die den Compilerfehler dieser Frage zurückgibt. Hier herunterladen
Antworten:
Ich hatte diesen Fehler, weil ich das tat:
anstatt
Daher denke ich, dass optional nicht ausgepackt wird, wenn der Zustand diesen Fehler verursachen kann
quelle
Wenn Sie in Swift auf einen Compiler-Segfault stoßen, erhalten Sie keine praktische Zeilennummer und Fehlermeldung. So können Sie das Problem aufspüren:
SegFaultDebugger.swift
in Ihrem Projekt.SegFaultDebugger.swift
.An diesem Punkt passiert eines von drei Dingen:
SegFaultDebugger.swift
zurück in die Originaldatei und verschieben Sie einen anderen Satz von Methoden inSegFaultDebugger.swift
. WiederholenSegFaultDebugger.swift
: Großartig! Verwenden Sie nun die binäre Suche, um den Segfault auf eine bestimmte Methode festzulegen, bis Sie herausfinden können, welches Konstrukt ihn verursacht.quelle
Ich habe diesen Fehler beim Erweitern eines meiner Protokolle und beim falsch eingegebenen und optionalen Typargument erhalten.
Der Unterschied in den Funktionsargumenten
String
im Prototyp undString?
in der Erweiterung verursachte den Segmentierungsfehler 11 .quelle
Ich hatte auch diesen Fehler und habe ihn folgendermaßen behoben:
Überprüfen Sie Ihr Projekt und finden Sie heraus, welche Dateien zweimal verwendet werden, und entfernen Sie eine oder löschen Sie alle Dateien und fügen Sie sie erneut hinzu.
Fehler in meinem Xcode:
quelle
In Xcode 7 können Sie im Debug-Navigator auf den Fehler klicken, und es wird eine erweiterte Ansicht der Abstürze angezeigt. Durch Klicken auf die Hamburger-Schaltfläche rechts wird der Fehler erweitert. Wenn Sie bis zum Ende der erweiterten Fehlermeldung scrollen, sehen Sie, woher er stammt.
Für mich hatte ich zwei dieser Segmentierungsfehler. Im obigen Bild sieht das erste so aus, wenn es zusammengeklappt ist, das zweite, wenn Sie den Hamburger-Knopf erweitern. Ganz unten in der erweiterten grauen Box sehen Sie eine Meldung, in der angegeben ist, wo der Compiler abgestürzt ist.
Beachten Sie jedoch, dass die Fehlermeldung manchmal nicht informativ genug ist. Sie zeigt Ihnen zwar an, wo sie abgestürzt ist, sagt aber nicht immer, warum und wie sie behoben werden kann. Die Beseitigung dieses Fehlers ist immer noch eine Frage der Vermutung.
quelle
Ich habe eine einfache Problemumgehung gefunden, bis das Problem in einem zukünftigen Xcode / Swift-Build behoben ist:
.swift
Datei, die verwendet wird.Platzieren Sie in dem von Ihnen bereitgestellten Beispielprojekt den Inhalt von
UIViewExtension.swift
undCALayerExtension.swift
darüberAppDelegate.swift
Hoffentlich können wir so funktionierenden Swift-Code schreiben , bis das Problem behoben ist.
quelle
Was mich betrifft
private
, füge ich dem statischen var einen festen Clang-Absturz hinzu:quelle
Ich hatte einen Compilersegmentierungsfehler bei einer Anweisung wie dieser:
Ich habe stattdessen nur eine if-else-Anweisung gemacht und es funktioniert.
quelle
Dieses Problem kann auch auftreten, wenn Sie eine Bedingung mit einem entpackten Bool als Eigenschaft deklarieren
quelle
In meinem Fall hat ein falsch platzierter Doppelpunkt während der String-Interpolation meinen gebrochen (XCode 6.1.1).
Beispiel:
als ich vorhatte zu tun:
quelle
Dieser Fehler ist mir passiert, als ich versucht habe, eine schwache Variable aus der übergeordneten Klasse zu überschreiben.
In der Basisklasse:
Abgeleitete Klasse:
Der Fehler verschwand, als ich ihn
=nil
aus der abgeleiteten Klasse entfernte.quelle
Ich habe heute eine Ausnahme
und das löste es:
Da "Any" -Typ ein beliebiges Typereignis "nil", "AnyObject" ist, optional, ... :) Es kann nicht optional sein, es ist bereits optional.
quelle
Dieser Fehler tritt auch auf, wenn Sie versehentlich eine Variable mit einem Typ deklarieren, der ihrem Namen entspricht:
quelle
Ist auf diesen Fehler aufgrund eines fremden generischen Typs für eine Operatorfunktion gestoßen, z
In meinem Fall wurde
<T>
das Problem durch Entfernen behoben.quelle
In meinem Fall hatte ich ein
struct
Inside a deklariertfunc
. Verschieben derstruct
auf Klassenebene löste das Problem.Jetzt, wo ich das schreibe, erinnere ich mich, dass ich zuvor Probleme mit
struct
Insidefunc
S hatte. Es war etwas anderes als der Segmentierungsfehler (der mit der Beta von Swift 1.2 berüchtigt zu werden scheint). OMG Apple, was machst du da?quelle
In meinem Fall dieser Fehler, weil ich den Klassennamen für die Variable verwende
Und das behebt mein Problem
quelle
In meinem Fall geschah dies, als ich eine falsche statische Initialisierung in einem Protokoll durchführte. Ich habe einen Weg gefunden, um herumzukommen, aber ein Compiler sollte beim Erstellen niemals einen Segmentierungsfehler erzeugen.
Es sind drei Dateien beteiligt. Ein Protokoll namens NamedSegues.swift, ein benutzerdefinierter TableViewController, der unter anderem das Protokoll implementiert, das einen Rückruf enthält, eine benutzerdefinierte TableViewCell, die auf dieses Protokoll verweist, um den Rückruf aufzurufen.
Ich habe es umgangen, indem ich?
In der Protokolldatei Datei1: Löschen Sie die Deklaration von getDefault (). In der CustomController-Datei2: Löschen Sie die Implementierung von getDefault. In CustomCellView, Datei3:
Der Compiler sollte dies abgefangen und eine Fehlermeldung ausgegeben haben, anstatt während des Builds einen Segmentierungsfehler auszulösen!
quelle
Scheint, als wäre der Swift 2-Compiler möglicherweise nicht ganz bereit für die Hauptsendezeit! Falls dies jemandem hilft, wurde ein Segmentierungsfehler angezeigt: 11 aufgrund einer Nichtübereinstimmung mit dem Variablentyp in einem Abschlussheader, insbesondere in einer Parse-Methode,
PFQuery.query.findObjectsInBackgroundWithBlock
.Sie können das Problem hier genauer sehen: https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/issues/280
quelle
Wie @Fjohn sagte, war dies ein Problem im Zusammenhang mit dem Auspacken eines optionalen für mich (brach sowohl in Xcode 7.0 Beta 6 als auch in Xcode 7 ein). In meinem Fall habe ich nicht optional das optionale ausgepackt (was mich darauf hingewiesen hat, war doppelt ?? im Deskriptor. Verwenden von if let, um das Problem zu lösen
quelle
Wie andere oben geschrieben haben, geschah dies für mich, wenn ich eine Erweiterung über ein Protokoll verwende, die Signatur der Methoden im Protokoll jedoch nicht mit den Implementierungen in einer Erweiterung übereinstimmt.
In meinem Fall hatte ich der Implementierung (in der Erweiterung) einen neuen Parameter hinzugefügt, aber vergessen, ihn auch zur Signatur der Methode im Protokoll hinzuzufügen.
quelle
In meinem Fall habe ich versucht, einen Funktionsparameter nach einem variadischen Parameter hinzuzufügen.
Durch Umkehren der Parametersequenz und Festlegen des variadischen Parameters zum letzten Parameter in der Parameterliste wurde dies behoben.
quelle
Dies geschieht normalerweise, wenn der Compiler (trotz Ihrer Meinung) nicht über genügend Informationen verfügt, um den Status einer Anweisung oder einer Variablen innerhalb einer Anweisung zu garantieren / zu bestimmen.
Stellen Sie sich beispielsweise vor, Sie haben ein Wörterbuch vom Typ [String: String], das Sie mit Städtenamen als Schlüssel und einer durch Kommas getrennten Liste der entsprechenden Postleitzahlen / Postleitzahlen füllen.
Stellen Sie sich vor, Sie möchten irgendwo in Ihrem Code die Liste der entsprechenden Codes aktualisieren:
In diesem Fall antwortet der Compiler mit einem Segmentierungsfehler, der
town
möglicherweise nicht im Wörterbuch enthalten ist, und kann daher nicht garantieren, dass die obige Anweisung einen gültigen Wert hat.Um dies zu beheben, sollten Sie den aktuellen Status von
myDict[town]
in einer separaten Variablen speichern , damit Sie den Fall von behandelnkey not in dict
und dann den Wert für den angegebenen Schlüssel aktualisieren können:Leider ist es nicht immer einfach, die Grundursache zu bestimmen, daher hoffe ich, dass dieses einfache Beispiel hilft.
quelle
Swift 3.0 (Xcode 8.1) weist dieses Problem auf, wenn ein Protokoll eine optionale Variable deklariert und ein Implementierer diese Variable als verzögert initialisierte Variable implementiert.
Fehler wird hier gemeldet: https://bugs.swift.org/browse/SR-1825
quelle
Xcode 8.2.
Hinzufügen der
@nonobjc
Protokollimplementierung zur Erweiterung, die Segmentierungsfehler verursacht. Verschieben Sie die@nonobjc
Protokollimplementierung in die Klassenimplementierung.quelle
In meinem Fall hat der Täter versehentlich eine Funktion überladen, die ein Array- Argument mit einem Argument mit einem variadischen Argument erwartet :
Als die Oberklasse es als Array definiert hatte:
quelle
Für mich hat Folgendes einen Segfault verursacht, während dies
type
optional ist:und das löste es:
quelle
Ich habe diesen Fehler mit der folgenden Methodensignatur in einem benutzerdefinierten UITableViewController erhalten.
Wechsel zu:
Das Problem wurde behoben.
quelle
Ich hatte das gleiche Problem in einer Erweiterung. Meine Erweiterung hatte zwei praktische Initialisierer:
Um den Fehler zu beseitigen, habe ich eine Instanzmethodenzuordnung (Wörterbuch: NSDictionary) hinzugefügt, und der Segmentierungsfehler ist verschwunden.
quelle
Für mich bestand das Problem darin, dass meine Architekturen nicht dem Standard entsprachen. Ich hatte i386 oder so hinzugefügt, habe es einfach auf den Standard-xcodeproject-Bogen zurückgesetzt und es wurde gut kompiliert.
quelle
Ich hatte das gleiche Problem in einem schnellen Projekt. Das Problem war eine Funktion, die ein Objekt hätte zurückgeben sollen, aber keine Rückgabe enthielt. Diese Art von Fehler wurde früher beim Bearbeiten mit Obj-C signalisiert. Es scheint, dass dies in Swift nicht der Fall ist.
quelle