2016-05-21 6 views
3

Ich habe einen Fehler "Befehl fehlgeschlagen wegen Signal: Segmentierungsfehler: 11", wenn ich meinen Swift-Code mit einer Bibliothek Eureka kompiliere. Ich verwende Xcode Version 7.3 (7D175). Meine Situation ist ähnlich wie this Frage.Befehl fehlgeschlagen wegen Signal: Segmentierungsfehler: 11 aufgetreten bei Eureka 1.5.0

In der obigen Frage erhielten einige Leute den gleichen Fehler mit Eureka, aber es hilft mir nicht. Ich habe gerade ein neues Projekt erstellt und "pod install" gemacht. Dann habe ich "AgeRow.swift" hinzugefügt. Also, dieses Projekt ist minimal und sauber.

Here ist ein kleines Beispiel, das den Segmentierungsfehler verursacht.

Bitte stellen Sie sicher, dass dieses Beispiel von Eureka 1.5.0 abhängt.

Ich schreibe meine benutzerdefinierte Zeile mit dem Namen AgeInlineRow. Wenn ich die Klasse AgeInlineRow auskommentiere, kann die Probe kompiliert werden. Das heißt, anderer Code scheint nicht die Ursache des Fehlers zu sein.

public final class AgeInlineRow: _AgeInlineRow, RowType, InlineRowType { 

    required public init(tag: String?) { 
     super.init(tag: tag) 
     onExpandInlineRow { cell, row, _ in 
      let color = cell.detailTextLabel?.textColor 
      row.onCollapseInlineRow { cell, _, _ in 
       cell.detailTextLabel?.textColor = color 
      } 
      cell.detailTextLabel?.textColor = cell.tintColor 
     } 
    } 

    public override func customDidSelect() { 
     super.customDidSelect() 
     if !isDisabled { 
      toggleInlineRow() 
     } 
    } 

    public func setupInlineRow(inlineRow: InlineRow) { 
     inlineRow.year_options = self.year_options 
     inlineRow.month_options = self.month_options 
     inlineRow.displayValueFor = self.displayValueFor 
    } 
} 

Wenn ich InlineRowType Protokoll entfernen und den Code ändern zu kompilieren, kann dieses Projekt zusammengestellt werden. Also, ich denke, die Ursache ist InlineRowType Protokoll und das ist die Grenzen meiner Debug-Fähigkeiten. Ich habe keine Ahnung, wie ich das Problem umgehen kann. Ich habe Eurekas PickerInlineRow Code kopiert und modifiziert. Natürlich verursacht PickerInlineRow keinen Segmentierungsfehler.

Ich wäre dankbar, wenn Sie die Gründe angeben könnten.

Hier ist die Fehlermeldung unten.

0 swift     0x0000000108f344eb llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 43 
1 swift     0x0000000108f337d6 llvm::sys::RunSignalHandlers() + 70 
2 swift     0x0000000108f34b4f SignalHandler(int) + 287 
3 libsystem_platform.dylib 0x00007fff919e252a _sigtramp + 26 
4 swift     0x0000000108d5f78b llvm::FoldingSet<llvm::AttributeSetNode>::NodeEquals(llvm::FoldingSetImpl::Node*, llvm::FoldingSetNodeID const&, unsigned int, llvm::FoldingSetNodeID&) const + 59 
5 swift     0x000000010835e15f llvm::CallInst::Create(llvm::FunctionType*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::ArrayRef<llvm::OperandBundleDefT<llvm::Value*> >, llvm::Twine const&, llvm::Instruction*) + 367 
6 swift     0x000000010835e2f0 llvm::IRBuilder<true, llvm::ConstantFolder, llvm::IRBuilderDefaultInserter<true> >::CreateCall(llvm::Value*, llvm::ArrayRef<llvm::Value*>, llvm::Twine const&) + 64 
7 swift     0x0000000106d869c5 swift::irgen::IRGenModule::emitSILWitnessTable(swift::SILWitnessTable*) + 1829 
8 swift     0x0000000106d1a0dd swift::irgen::IRGenModuleDispatcher::emitGlobalTopLevel() + 861 
9 swift     0x0000000106da5a5e performIRGeneration(swift::IRGenOptions&, swift::ModuleDecl*, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, swift::SourceFile*, unsigned int) + 1278 
10 swift     0x0000000106da5f06 swift::performIRGeneration(swift::IRGenOptions&, swift::SourceFile&, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, unsigned int) + 70 
11 swift     0x0000000106c89a1c performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&) + 15004 
12 swift     0x0000000106c8541d frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 2781 
13 swift     0x0000000106c80e3c main + 1932 
14 libdyld.dylib   0x00007fff91af25ad start + 1 
Stack dump: 
0. Program arguments: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -c /Users/keta/Documents/Swift/AgeInlineRowSample/AgeInlineRowSample/ViewController.swift /Users/keta/Documents/Swift/AgeInlineRowSample/AgeInlineRowSample/AppDelegate.swift -primary-file /Users/keta/Documents/Swift/AgeInlineRowSample/AgeInlineRowSample/AgeRow.swift -target x86_64-apple-ios9.3 -enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk -I /Users/keta/Library/Developer/Xcode/DerivedData/AgeInlineRowSample-dpkftrsqyflgpvchqnoeoylaylrj/Build/Products/Debug-iphonesimulator -F /Users/keta/Library/Developer/Xcode/DerivedData/AgeInlineRowSample-dpkftrsqyflgpvchqnoeoylaylrj/Build/Products/Debug-iphonesimulator -F /Users/keta/Library/Developer/Xcode/DerivedData/AgeInlineRowSample-dpkftrsqyflgpvchqnoeoylaylrj/Build/Products/Debug-iphonesimulator/Eureka -enable-testing -g -module-cache-path /Users/keta/Library/Developer/Xcode/DerivedData/ModuleCache -D COCOAPODS -serialize-debugging-options -Xcc -I/Users/keta/Library/Developer/Xcode/DerivedData/AgeInlineRowSample-dpkftrsqyflgpvchqnoeoylaylrj/Build/Intermediates/AgeInlineRowSample.build/Debug-iphonesimulator/AgeInlineRowSample.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/keta/Library/Developer/Xcode/DerivedData/AgeInlineRowSample-dpkftrsqyflgpvchqnoeoylaylrj/Build/Intermediates/AgeInlineRowSample.build/Debug-iphonesimulator/AgeInlineRowSample.build/AgeInlineRowSample-generated-files.hmap -Xcc -I/Users/keta/Library/Developer/Xcode/DerivedData/AgeInlineRowSample-dpkftrsqyflgpvchqnoeoylaylrj/Build/Intermediates/AgeInlineRowSample.build/Debug-iphonesimulator/AgeInlineRowSample.build/AgeInlineRowSample-own-target-headers.hmap -Xcc -I/Users/keta/Library/Developer/Xcode/DerivedData/AgeInlineRowSample-dpkftrsqyflgpvchqnoeoylaylrj/Build/Intermediates/AgeInlineRowSample.build/Debug-iphonesimulator/AgeInlineRowSample.build/AgeInlineRowSample-all-non-framework-target-headers.hmap -Xcc -ivfsoverlay -Xcc /Users/keta/Library/Developer/Xcode/DerivedData/AgeInlineRowSample-dpkftrsqyflgpvchqnoeoylaylrj/Build/Intermediates/AgeInlineRowSample.build/all-product-headers.yaml -Xcc -iquote -Xcc /Users/keta/Library/Developer/Xcode/DerivedData/AgeInlineRowSample-dpkftrsqyflgpvchqnoeoylaylrj/Build/Intermediates/AgeInlineRowSample.build/Debug-iphonesimulator/AgeInlineRowSample.build/AgeInlineRowSample-project-headers.hmap -Xcc -I/Users/keta/Library/Developer/Xcode/DerivedData/AgeInlineRowSample-dpkftrsqyflgpvchqnoeoylaylrj/Build/Products/Debug-iphonesimulator/include -Xcc -I/Users/keta/Library/Developer/Xcode/DerivedData/AgeInlineRowSample-dpkftrsqyflgpvchqnoeoylaylrj/Build/Intermediates/AgeInlineRowSample.build/Debug-iphonesimulator/AgeInlineRowSample.build/DerivedSources/x86_64 -Xcc -I/Users/keta/Library/Developer/Xcode/DerivedData/AgeInlineRowSample-dpkftrsqyflgpvchqnoeoylaylrj/Build/Intermediates/AgeInlineRowSample.build/Debug-iphonesimulator/AgeInlineRowSample.build/DerivedSources -Xcc -DDEBUG=1 -Xcc -DCOCOAPODS=1 -Xcc -working-directory/Users/keta/Documents/Swift/AgeInlineRowSample -emit-module-doc-path /Users/keta/Library/Developer/Xcode/DerivedData/AgeInlineRowSample-dpkftrsqyflgpvchqnoeoylaylrj/Build/Intermediates/AgeInlineRowSample.build/Debug-iphonesimulator/AgeInlineRowSample.build/Objects-normal/x86_64/AgeRow~partial.swiftdoc -Onone -module-name AgeInlineRowSample -emit-module-path /Users/keta/Library/Developer/Xcode/DerivedData/AgeInlineRowSample-dpkftrsqyflgpvchqnoeoylaylrj/Build/Intermediates/AgeInlineRowSample.build/Debug-iphonesimulator/AgeInlineRowSample.build/Objects-normal/x86_64/AgeRow~partial.swiftmodule -serialize-diagnostics-path /Users/keta/Library/Developer/Xcode/DerivedData/AgeInlineRowSample-dpkftrsqyflgpvchqnoeoylaylrj/Build/Intermediates/AgeInlineRowSample.build/Debug-iphonesimulator/AgeInlineRowSample.build/Objects-normal/x86_64/AgeRow.dia -emit-dependencies-path /Users/keta/Library/Developer/Xcode/DerivedData/AgeInlineRowSample-dpkftrsqyflgpvchqnoeoylaylrj/Build/Intermediates/AgeInlineRowSample.build/Debug-iphonesimulator/AgeInlineRowSample.build/Objects-normal/x86_64/AgeRow.d -emit-reference-dependencies-path /Users/keta/Library/Developer/Xcode/DerivedData/AgeInlineRowSample-dpkftrsqyflgpvchqnoeoylaylrj/Build/Intermediates/AgeInlineRowSample.build/Debug-iphonesimulator/AgeInlineRowSample.build/Objects-normal/x86_64/AgeRow.swiftdeps -o /Users/keta/Library/Developer/Xcode/DerivedData/AgeInlineRowSample-dpkftrsqyflgpvchqnoeoylaylrj/Build/Intermediates/AgeInlineRowSample.build/Debug-iphonesimulator/AgeInlineRowSample.build/Objects-normal/x86_64/AgeRow.o 

P.S. Ich möchte eine benutzerdefinierte Inline-Zeile, die UIPickerView mit zwei Komponenten hat.

Antwort

2

Ich stieß auf diese, als ich DateInlineRow implementierte. Es scheint, dass der schnelle Compiler einige Typen nicht ableiten kann.

Ich landete DateInlineRow generisch, obwohl ich nicht den generischen Typ für DateInlineRow brauche.

Check out DateInlineRow Implementierung

/// A row with an NSDate as value where the user can select a date from an inline picker view. 
public final class DateInlineRow_<T>: _DateInlineRow, RowType, InlineRowType { 
    required public init(tag: String?) { 
     super.init(tag: tag) 
     onExpandInlineRow { cell, row, _ in 
      let color = cell.detailTextLabel?.textColor 
      row.onCollapseInlineRow { cell, _, _ in 
       cell.detailTextLabel?.textColor = color 
      } 
      cell.detailTextLabel?.textColor = cell.tintColor 
     } 
    } 

    public override func customDidSelect() { 
     super.customDidSelect() 
     if !isDisabled { 
      toggleInlineRow() 
     } 
    } 
} 

public typealias DateInlineRow = DateInlineRow_<NSDate> 

Nach dieser Implementierung sein sollte .....

public final class AgeInlineRow_<T>: _AgeInlineRow, RowType, InlineRowType { 

    ..... 
} 

public typealias AgeInlineRow = AgeInlineRow_<String> 

Hoffe, es hilft

+0

Danke für die Antwort. Der Code hat funktioniert. Ich musste Code implementieren, der zwischen der Zeile, die "immer" sichtbar ist, und der Zeile, die expandiert/kollabiert, kommuniziert. Außerdem habe ich mein Projekt auf GitHub, das ich oben gezeigt habe, aktualisiert. Ich glaube, dass das Projekt fast perfekt ist, außer 'public func == (lhs: Alter, rhs: Alter) -> Bool'-Funktion. Die Funktion erhält immer die gleichen lhs und rhs, also entschied ich mich, immer 'false' zurückzugeben. Wie auch immer, ich schätze Ihren Kommentar. Danke nochmal. –