Seit Xcode 7 und Swift 2.0 bekomme ich den obigen Fehler, wie im Screenshot gezeigt:
Ich habe keine Ahnung, woher das kommt, das Bereinigen und Löschen abgeleiteter Daten hat nicht funktioniert.
Wer sonst hat dieses Problem?
projekt:
ziel:
Ich habe das gleiche Problem mit allen Xcode 6.3-Projekten, die ich in Xcode 7.0 öffne. Ich habe ein neues Projekt erstellt, alle meine Quelldateien und Ressourcen kopiert und alles funktionierte ohne diesen Compiler-Fehler. Ich dachte, das hat etwas mit den Projekteinstellungen zu tun. Ich habe die Swift Compile Optimization auf "none" abgeschaltet und die Trap 6 war weg. Vielleicht gibt es andere Einstellungen, die auch Probleme verursachen, aber für mich war es das.
In meinem Fall
Error
override func observeValueForKeyPath(keyPath: (String!)?, ofObject object: (AnyObject!)?, change: ([NSObject : AnyObject]!)?, context: UnsafeMutablePointer<Void>)
Ok
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [NSObject : AnyObject]?, context: UnsafeMutablePointer<Void>)
Das hat für mich funktioniert, also probiere es einfach aus. Ich habe diese Fehlermeldung erhalten, als ich den Code von Swift 3 nach Swift 4 konvertierte.
Gehen Sie einfach zu Project> Target> Build Setting und suchen Sie nach "Swift Compiler - Code Generation", und setzen Sie die Optimierungsebene auf "No Optimazation [-Onone]".
In meinem Fall,
Der Compiler würde mir die Nachricht geben:
Incorrect number of arguments passed to called function!
%4 = call %Swift.type* @_T015SimplifiedCoder6StructVMa() #1, !dbg !3112
<unknown>:0: error: fatal error encountered during compilation; please
file a bug report with your project and the crash log
<unknown>:0: note: Broken function found, compilation aborted!
mir wurde jedoch klar, dass ich einen Standardparameter verpasst hatte:
class Class<K> {
init<T: Protocol>(_ value: T) where T.Key == K {}
}
protocol Protocol {
associatedtype Key
static func getClass<NewKey>(_: NewKey.Type) -> Class<NewKey>
}
struct Struct<K>: Protocol {
typealias Key = K
static func getClass<NewKey>(_: NewKey.Type) -> Class<NewKey> {
let _self = Struct<NewKey>()
return Class(_self)
}
}
protocol CanGetClass {
associatedtype StructType: Protocol
}
extension CanGetClass {
func getClass<Key>(_: Key.Type) -> Class<Key> {
return StructType.getClass(Key.self)
}
}
struct R: CanGetClass {
typealias StructType = Struct
}
geändert:
typealias StructType = Struct
zu:
typealias StructType = Struct<Int>
die Erweiterung von CanGetClass hat versucht, getClass für einen unvollständigen Typ aufzurufen.
Stellen Sie sicher, dass Sie kein privates Protokoll in die Klassenerweiterung implementieren. Die meiste Zeit wäre ziemlich seltsam, ein privates Protokoll zu haben, aber nicht notwendig, je nachdem, was Sie einkapseln möchten.
So etwas in derselben Datei:
class C: ... {
}
extension C: P {
}
private protocol P: class {
}
Tun Sie dies und Sie werden sicherlich Command failed due to signal: Abort trap: 6
bekommen
Entfernen Sie stattdessen den Modifizierer private
aus dem Protokoll, und der Fehler ist behoben.
Ich habe diesen Fehler auch in XCode 7 Beta 5 erhalten. Nachdem ich den Build gesäubert habe, wurde ein weiterer Fehler angezeigt, der besagte, dass eine meiner Klassen nicht dem Protokoll entspricht, das ich gerade geändert habe. Nachdem ich das Problem behoben habe, wird es erstellt. Die von mir vorgenommenen Protokolländerungen betreffen zwei Parametertypen einer Methode von Int
in Int32
.
Ich habe dies erhalten, als das getan hat:
protocol ProtocolA {
associatedtype BType: ProtocolB
}
protocol ProtocolB {
associatedtype AType: ProtocolA
}
Ich habe dieses Problem mit diesen Schritten behoben:
lief 'pod deintegrate'
Machen Sie eine Pod-Datei wie folgt: Plattform: IOS, '8.0' use_frameworks!
lief 'pod install'
Dies hat den Fehler für mich verursacht.
Vor:
for (key,value) in hash{
count += value.count
}
Nach dem:
for (_,value) in hash{
count += value.count
}
Es gefiel nicht, dass der Schlüssel nirgends benutzt wurde. Ich bin nicht sicher, warum der Build fehlschlagen sollte.
In Xcode 9.3 habe ich den spezifischen Pod erneut installiert, in dem Warnungen angezeigt und die abgeleiteten Daten wieder gelöscht. Es hat für mich funktioniert :)
Für mich verursachen die folgenden Aussagen einen Fehler.
let dict = mainDict as [String:String]
Beheben Sie das Problem mit force unwraps
let dict = mainDict as! [String:String]
Mit dem Compiler ist nichts verbunden. Es handelt sich nur um ein Typumwandlungsproblem. Apple sollte eine korrekte Beschreibung anstelle des Compilerfehlers enthalten .
In meinem Fall hatte ich das @objc-Protokoll mit optionalen Methoden und als ich seine Methoden auch in der Swift-Klasse anrief, bekam ich diesen Fehler. Nachdem ich das optionale Schlüsselwort aus den Funktionen des Protokolls entfernt hatte, war der Fehler verschwunden.
vorher (mit Fehler):
@objc protocol SomeDelegate:NSObjectProtocol{
optional func someDelegateMethod()
}
class MySwiftClass{
func notifyMyDelegate(){
mydelegate?.someDelegateMethod?() //this line caused the error
}
}
nach dem:
@objc protocol SomeDelegate:NSObjectProtocol{
func someDelegateMethod()
}
class MySwiftClass{
func notifyMyDelegate(){
mydelegate?.someDelegateMethod()
}
}
Für mich war es MD5.Swift Problem
Sie müssen in Ihrem Projekt auch in den Pods nach dem Dateinamen "MD5.Swift" suchen
und ersetzen Sie den gesamten Inhalt mit dieser Datei hier
https://github.com/onmyway133/SwiftHash/blob/master/Sources/MD5.Swift
In meinem Fall hatte ich einen private struct Constants
in class A
und extension A
.
Wahrscheinlich sollte es einen Fehler geben, aber es tat es nicht.
Ich habe diese Fehlermeldung erhalten, als ich versuche, Tests auszuführen.
rm -rf ~/Library/Developer/Xcode/DerivedData
Durch das Löschen abgeleiteter Daten wurde das Problem behoben
Ich kann dies einfach und konsistent mit einem brandneuen Projekt reproduzieren, das in Xcode 7.0 beta (7A120f) erstellt wurde. Beachten Sie, dass das Problem wahrscheinlich breiter ist als im Beispiel, aber dies ist für mich zu 100% reproduzierbar, indem Sie einem neuen Projekt nur eine einzige Zeile hinzufügen. Dieses Problem scheint zumindest für dieses Beispiel ausschließlich für iOS und nicht für OS X zu gelten. Habe den Fehlerbericht # 21376523 an Apple übermittelt.
Erstellen Sie ein brandneues Projekt in Xcode 7.0 (7A120f). Typ ist "Game", Sprache ist "Swift", Spieltechnologie ist "SceneKit".
Erstellen und mit Standardeinstellungen ausführen Das Projekt erstellt und läuft gut im Simulator (Sie sehen das standardmäßige rotierende 3D-Raumschiffmodell).
Fügen Sie GameViewController.Swift wie folgt eine einzelne SCNVector3-Eigenschaft hinzu:
class GameViewController: UIViewController {
var p = SCNVector3Zero
-> Produziert "Abbruchfalle: 6". Projekt wird nicht mehr kompiliert.
Ändern Sie die Konstante in einen leeren Initialisierer.
class GameViewController: UIViewController {
var p = SCNVector3()
-> Gleiches Problem "Abbruchfalle: 6"
-> "Abortfalle: 6" ist weg, das Projekt wird erneut kompiliert und ausgeführt.
Ändern Sie "var" in "let".
class GameViewController: UIViewController {
let p = SCNVector3Zero
-> Kompiliert und läuft.
Ändern Sie den Eigenschaftstyp in SCNVector4 anstelle von SCNVector3.
class GameViewController: UIViewController {
var p = SCNVector4Zero
-> Kompiliert und läuft.
BEARBEITEN: Dieses Problem wurde in Xcode 7.0 beta-2 (7A121l) behoben, wenn "Abort Trap: 6" aufgrund eines Float-3-Vektortyps (z. B. SCNVector3) angezeigt wird. Aus den Versionshinweisen:
• Ein Compiler-Absturz beim Aufruf von C- oder Objective-C-Funktionen, die .__ benötigen. SIMD-Float3-Parameter wurden behoben. (21294916)
Ich konnte das Problem beheben, indem ich den Bridging-Header änderte. In meinem Fall war das Hinzufügen eines Zeilenumbruchs ausreichend. Sehr seltsamer Bug.
Ich habe keine anderen Lösungen ausprobiert. Ich habe dieses Problem für dieses Setup erhalten:
func speacialAdd(_ num1: Int, to num2: Int){
func specialMultiply(_ digit1: Int, with digit2: Int = num2){ // SOURCE OF PROBLEM
print(digit2)
print(digit1)
}
specialMultiply(5)
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print(speacialAdd(5, to: 6))
}
}
Diese Zeile ist die Ursache des Problems. Die Standardeinstellung auf ein Argument scheint für eine verschachtelte Funktion nicht zu funktionieren
func specialMultiply(_ digit1: Int, with digit2: Int = num2) // ERROR
Lösungen sind:
func specialMultiply(_ digit1: Int, with digit2: Int) // OK
func specialMultiply(_ digit1: Int, with digit2: Int = 6) // OK
FWIW Ich habe das eigentlich zuerst auf dem Spielplatz geschrieben und einen anderen Fehler erhalten:
Spielplatzausführung fehlgeschlagen:
fehler: Symbole konnten nicht nachgeschlagen werden:
__T013__lldb_expr_111speacialAddySi_Si2totF4num2L_Sifau
Für mich war dieser Fehler:
Ich habe eine Datei erstellt, um Erweiterungen in UIView zu erstellen. In dieser Datei habe ich ein privates Protokoll mit dem Namen Foo
erstellt.
Dann habe ich gemacht:
extension UIView: Foo
Durch das Entfernen des privaten Protokolls aus dem Protokoll wurde der Fehler behoben.
Ich denke, das ist wahrscheinlich ein Fehler. Der Compiler sollte uns vor dem Problem warnen. Auf dieselbe Weise, in der wir gewarnt werden, können wir keine privaten Konformitäten zu Typen hinzufügen. Sie sollten uns sagen, dass die Konformität ein "öffentliches/internes" Protokoll verwenden sollte.
Ich habe diese Meldung erhalten, wenn Sie do-try-catch in einem Failable-Initialisierer verwenden:
public init?() {
do {
...
super.init(superParam: try getParamForSuper())
...
} catch {
...
}
}
Die Kompilierung war erfolgreich, wenn der try-Aufruf in eine eigene lokale Variable verschoben wurde:
public init?() {
do {
...
let superParam = try getParamForSuper()
super.init(superParam: superParam)
...
} catch {
...
}
}
In meinem Fall wurde der Fehler durch das Setzen eines Werts auf einen Parameter in einer Funktion auf Null verursacht.
Vor:
public func comparableValidator<T: Comparable>(minValue : T? = nil, maxValue : T? = nil, value: T) -> Void {
if let min = minValue {
_assertFunc(min <= value, "\(value) must be at least \(min)")
}
if let max = maxValue {
_assertFunc(max >= value, "\(value) must be at most \(max)")
}
}
Nach dem:
public func comparableValidator<T: Comparable>(minValue : T?, maxValue : T?, value: T) -> Void {
if let min = minValue {
_assertFunc(min <= value, "\(value) must be at least \(min)")
}
if let max = maxValue {
_assertFunc(max >= value, "\(value) must be at most \(max)")
}
}
für mich .. Ich habe den Inhalt einer @objc-Funktion wie folgt geändert:
vor:
@objc func didConnectWithSession() {
context!.stream.disconnectAfterSending()
}
nach dem:
@objc func didConnectWithSession() {
//context!.stream.disconnectAfterSending()
}
Dies hat den Fehler verursacht. Ich löste mich durch Entfernen der gesamten Funktion.
In meinem Fall benennt mehrere Parameter von init-Methoden um, wobei ein Protokoll die Kompilierung nicht besteht. Ich löse es, indem Sie es nacheinander tun und nach jeder Änderung erneut kompilieren.
Ich hatte das gleiche Problem und stellte fest, dass ich das Build-System in "New Build System" geändert hatte, nachdem ich einen Artikel über "Beschleunigen Ihrer Builds" gelesen hatte (Dies ist übrigens der Artikel hier )
So kehren Sie zum Standard-Build-System zurück:
Hoffe, es hilft jemandem und verschwendet keine Stunden damit herauszufinden, warum das nicht funktioniert hat!
Ich habe es geschafft, mein Projekt zu erstellen, indem ich die Optimierungsstufe im Menü "Swift Compiler - Code Generation" in den Zieleinstellungen (nicht den Projekteinstellungen) auf "Keine" setzte. Siehe den Screenshot unten ...
Dies sollte keine dauerhafte Lösung sein, da die Größe des ipa mehr als verdoppelt wird. Es sollte möglich sein, die Optimierung wieder einzuschalten, wenn Xcode 7 aus der Betaversion kommt.
Dieses Problem ist in Xcode 10.2.1 weiterhin vorhanden. Nach Bereinigen des Build-Ordners ist der Fehler behoben.
Ok, in meinem Fall war es, weil ich eine Enumeration in einer generischen Klasse hatte. Das Seltsame ist, dass der Compiler mir bei der Isolierung des Problems (in BaseDao2) den richtigen Fehler gemeldet hat. In meiner echten BaseDao-Implementierung (die mehr Zeug enthält) wird jedoch "Trap 6" ausgelöst.
Type 'DaoError2' nested in generic type 'BaseDao2' is not allowed
Als ich das hatte:
class BaseDao2<T>: InjectRestSession{
enum DaoError2: ErrorType{
case FAILED_RESPONSE(String)
case INVALID_RESULT(String)
case FAIL_TO_LIST, FAIL_TO_GET
}
func get() -> T?{
return nil
}
}
Jedenfalls verschiebe ich in meinem Fall den DaoError aus dem BaseDao und kompiliert alles. Mein Gefühl ist jedenfalls, dass "Trap 6" etwas ist, das nicht kompiliert werden kann, und der Compiler wurde verwirrt. Wenn Sie von einem einfachen Fall aus beginnen und das zurücksetzen, von dem Sie annehmen, dass es möglicherweise ein Problem verursacht, kann es hilfreich sein, das Problem zu ermitteln, indem Sie den richtigen Kompilierungsfehler erhalten. Mit anderen Worten, Sie müssen mit dem Swift-Compiler vorsichtig sein.