Dodanie (wygodnej) height
właściwości obliczonej do UIView
w moim UIViewExtension.swift
pliku powoduje segfault kompilatora Swift ... Co może tu być nie tak?
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
Jeśli potrzeba więcej informacji, aby to złamać, po prostu skomentuj. Dzięki!
Edytować:
Oto powiązany plik .xcodeproj, który zwraca błąd kompilatora tego pytania. Pobierz tutaj
Odpowiedzi:
Miałem ten błąd, ponieważ robiłem to:
zamiast
więc myślę, że opcjonalny nie rozpakowany, jeśli stan może spowodować ten błąd
źródło
Kiedy napotkasz segfault kompilatora w Swift, nie otrzymasz przydatnego numeru wiersza i komunikatu o błędzie. Oto, jak możesz wyśledzić problem:
SegFaultDebugger.swift
w swoim projekcie.SegFaultDebugger.swift
.W tym momencie dzieje się jedna z trzech rzeczy:
SegFaultDebugger.swift
powrotem do oryginalnego pliku i przenieś inny zestaw metod doSegFaultDebugger.swift
. PowtarzaćSegFaultDebugger.swift
: Świetnie! Teraz użyj wyszukiwania binarnego, aby przypiąć segfault do określonej metody, dopóki nie dowiesz się, jaka konstrukcja ją powoduje.źródło
Otrzymałem ten błąd podczas rozszerzania jednego z moich protokołów i błędnie wpisanego i opcjonalnego argumentu typu.
Różnica w argumentach funkcji
String
w prototypie iString?
rozszerzeniu spowodowała błąd segmentacji 11 .źródło
Miałem też ten błąd i naprawiłem go w ten sposób:
Sprawdź swój projekt i dowiedz się, które pliki są używane dwukrotnie i usuń jeden lub usuń i ponownie dodaj je wszystkie.
Błędy w moim Xcode:
źródło
W Xcode 7 możesz kliknąć błąd w nawigatorze debugowania, a zostanie wyświetlony rozszerzony widok awarii. Kliknięcie przycisku hamburgera po prawej stronie rozwija błąd, a jeśli przewiniesz do samego dołu rozwiniętego komunikatu o błędzie, zobaczysz, skąd on pochodzi.
U mnie wystąpiły dwa z tych błędów segmentacji. Na powyższym obrazku pierwszy z nich przedstawia to, jak wygląda zwinięty, a drugi to rozwinięcie przycisku hamburgera. Na samym dole rozwiniętego szarego pola zobaczysz komunikat informujący o miejscu awarii kompilatora.
Należy jednak pamiętać, że komunikat o błędzie może czasami nie zawierać wystarczających informacji, więc chociaż informuje o miejscu awarii, nie zawsze wyjaśnia, dlaczego i jak to naprawić. Pozbycie się tego błędu jest nadal w dużej mierze kwestią domysłów.
źródło
Odkryłem proste obejście problemu, dopóki problem nie zostanie rozwiązany w przyszłej kompilacji Xcode / Swift:
.swift
używanym pliku.W podanym przez Ciebie przykładowym projekcie umieść zawartość
UIViewExtension.swift
iCALayerExtension.swift
powyżejAppDelegate.swift
Mamy nadzieję, że pozwoli nam to napisać działający kod Swift, dopóki problem nie zostanie rozwiązany.
źródło
Jak dla mnie dodanie
private
do static var fixed clang crash:źródło
Wystąpił błąd segmentacji kompilatora w oświadczeniu takim:
Zamiast tego wykonałem instrukcję if-else i działa.
źródło
Możesz również mieć ten problem, jeśli zadeklarujesz warunek z rozpakowaną wartością Bool jako właściwością
źródło
W moim przypadku źle umieszczony dwukropek podczas interpolacji ciągów złamał mój (XCode 6.1.1).
Przykład:
kiedy miałem zamiar zrobić:
źródło
Ten błąd przydarzył mi się, gdy próbowałem zastąpić słabą zmienną z klasy nadrzędnej.
W klasie bazowej:
Klasy pochodnej:
Błąd zniknął po usunięciu
=nil
z klasy pochodnej.źródło
Dziś łapię wyjątek
i to rozwiązało:
Ponieważ typ "Dowolny" jest zdarzeniem dowolnego typu "nil", "AnyObject", opcjonalny, ... :) Nie może być opcjonalny, już jest opcjonalny.
źródło
Ten błąd występuje również, jeśli przypadkowo zadeklarujesz zmienną o typie pasującym do jej nazwy:
źródło
Wystąpił ten błąd z powodu obcego typu ogólnego w funkcji operatora, np
W moim przypadku usunięcie
<T>
rozwiązało problem.źródło
W moim przypadku zadeklarowałem
struct
inside afunc
. Przenoszeniestruct
do poziomu klasy rozwiązało problem.Teraz, kiedy to piszę, pamiętam, że miałem wcześniej problemy z
struct
wewnętrznymifunc
. To było coś innego niż błąd segmentacji (który wydaje się być znany z wersji beta Swift 1.2). OMG Apple, co tam robisz?źródło
W moim przypadku ten błąd, ponieważ używam nazwy klasy dla zmiennej
I to rozwiązuje mój problem
źródło
W moim przypadku stało się to, gdy wykonałem nieprawidłową statyczną inicjalizację w protokole. Znalazłem sposób na obejście tego problemu, ale kompilator nigdy nie powinien generować błędu segmentacji podczas budowania.
W grę wchodzą trzy pliki. Protokół NamedSegues.swift, niestandardowy TableViewController, który między innymi implementuje protokół zawierający wywołanie zwrotne, niestandardową TableViewCell, która zawiera odwołanie do tego protokołu w celu wywołania wywołania zwrotnego.
Poradziłem sobie z tym, używając?
W pliku protokołu plik1: usuń deklarację getDefault () W pliku CustomController plik2: usuń implementację getDefault. W CustomCellView plik3:
Kompilator powinien był to wychwycić i podać jakiś komunikat o błędzie zamiast zgłaszać błąd segmentacji podczas kompilacji!
źródło
Wygląda na to, że kompilator Swift 2 mógł nie być całkiem gotowy na czas największej oglądalności! Na wypadek, gdyby to komukolwiek pomogło, otrzymałem błąd segmentacji: 11 z powodu niezgodności z typem zmiennej w nagłówku zamknięcia, szczególnie w metodzie Parse,
PFQuery.query.findObjectsInBackgroundWithBlock
.Możesz zobaczyć problem bardziej szczegółowo tutaj: https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/issues/280
źródło
Jak powiedział @Fjohn , był to problem związany z rozpakowywaniem opcjonalnego dla mnie (zepsuł się zarówno w Xcode 7.0 beta 6, jak i Xcode 7). W moim przypadku nie rozpakowałem opcjonalnego elementu opcjonalnego (wskazówka to podwójne ?? w deskryptorze. Używanie if let rozwiązało problem
źródło
Jak napisali inni powyżej, dla mnie stało się to, gdy używam rozszerzenia zamiast protokołu, ale sygnatura metod w protokole nie jest zgodna z implementacjami w rozszerzeniu.
W moim przypadku dodałem do implementacji nowy parametr (w rozszerzeniu), ale zapomniałem dodać go również do sygnatury metody w protokole.
źródło
w moim przypadku próbowałem dodać parametr funkcji po parametrze wariadycznym.
Odwrócenie sekwencji parametrów i uczynienie parametru wariadycznego ostatnim parametrem na liście parametrów naprawiło ten problem.
źródło
Dzieje się tak zwykle, gdy kompilator nie ma wystarczających informacji (pomimo tego, co myślisz), aby zagwarantować / określić stan instrukcji lub zmiennej w instrukcji.
Na przykład, wyobraź sobie, że masz słownik typu [String: String], w którym wpisujesz nazwy miast jako klucze i rozdzieloną przecinkami listę odpowiadających im kodów pocztowych / pocztowych.
Wyobraź sobie, że gdzieś w swoim kodzie chcesz zaktualizować listę odpowiednich kodów:
W takim przypadku kompilator odpowie błędem segmentacji, ponieważ
town
może nie być w słowniku i dlatego nie może zagwarantować, że powyższa instrukcja będzie miała prawidłową wartość.Aby rozwiązać ten problem, należy zapisać aktualny stan
myDict[town]
w osobnej zmiennej, co pozwoli obsłużyć przypadek,key not in dict
a następnie zaktualizować wartość dla danego klucza:Niestety, nie zawsze łatwo jest określić główną przyczynę, więc mam nadzieję, że ten prosty przykład pomoże.
źródło
Swift 3.0 (Xcode 8.1) wykazuje ten problem, gdy protokół deklaruje opcjonalną zmienną, a implementujący implementuje tę zmienną jako leniwą zainicjowaną.
Zgłoszono błąd tutaj: https://bugs.swift.org/browse/SR-1825
źródło
Xcode 8.2.
Dodanie
@nonobjc
implementacji protokołu do rozszerzenia powodującego błędy segmentacji. Przenieś@nonobjc
implementację protokołu do implementacji klasy.źródło
W moim przypadku winowajcą było przypadkowe przeciążenie funkcji oczekującej argumentu tablicowego z argumentem wariadycznym :
Kiedy nadklasa zdefiniowała ją jako tablicę:
źródło
Dla mnie następujące spowodowało segfault, podczas gdy
type
jest opcjonalne:i to rozwiązało:
źródło
Otrzymałem ten błąd z następującą sygnaturą metody w niestandardowym UITableViewController.
zmiana na:
naprawiono problem.
źródło
Miałem ten sam problem w rozszerzeniu. Moje rozszerzenie miało dwa wygodne inicjatory:
Aby pozbyć się tego błędu, dodałem mapę metod instancji (słownik: NSDictionary) i zniknął błąd błędu segmentacji.
źródło
Dla mnie problemem było to, że moja architektura nie była ustawiona na standard. Dodałem i386 lub coś w tym stylu, po prostu ustawiłem go z powrotem na domyślny arch xcodeproject i skompilowałem się dobrze.
źródło
Miałem ten sam problem w szybkim projekcie. Problem polegał na funkcji, która powinna zwrócić obiekt, ale nie miała w nim zwrotu. Ten rodzaj błędu był sygnalizowany podczas edycji w Obj-C. Wygląda na to, że w Swift nie jest.
źródło