webentwicklung-frage-antwort-db.com.de

Swift Beta 6 - Verwirrende Linker-Fehlermeldung

Ich erhalte eine Fehlermeldung vom Linker, wenn ich ein Swift) - Programm mit Xcode 6 Beta 6 für iOS 8 erstelle. Dieser Code wurde mit Beta 5 kompiliert und korrekt ausgeführt.

Undefined symbol for architecture x86_64:
__TFSs26_forceBridgeFromObjectiveCU__FTPSs9AnyObject_MQ__Q_", referenced from:
 __TFC8RayTrace14RayTracingPlot15drawFocalPointfS0_FT_T_ in RayTracingPlot.o
ld: symbol(s) not found for architecture x86_64

Hier ist der fragliche Code:

private func drawFocalPoint() {
    var attributes = Dictionary<String, AnyObject>()

    let FString: String = "F"
    let distance: CGFloat = focalDistance

    let centerX = CGRectGetMidX(bounds)
    let centerY = CGRectGetMidY(bounds)

    let circleRadius: CGFloat = 4.0
    let focalPointFrame = CGRectMake(0, 0, circleRadius * 2.0, circleRadius * 2.0)
    var path = UIBezierPath(ovalInRect: focalPointFrame)
    let color = UIColor.blackColor()

    let currentContext = UIGraphicsGetCurrentContext()
    CGContextSaveGState(currentContext)
    let shadowColor = UIColor(white:0, alpha:0.75).CGColor
    CGContextSetShadowWithColor(currentContext, CGSizeMake(0, 4), CGFloat(8), shadowColor)

    // Image F
    var imageFPath = UIBezierPath(CGPath: path.CGPath)
    let imageFTransform = CGAffineTransformMakeTranslation((centerX - distance - circleRadius),
        (centerY - circleRadius))
    imageFPath.applyTransform(imageFTransform)
    color.set()
    imageFPath.fill()
    FString.drawAtPoint(CGPointMake(centerX - distance - circleRadius, centerY + 5), withAttributes:attributes)

    CGContextSetShadowWithColor(currentContext, CGSizeMake(0.0, 0.0), CGFloat(0.0), nil) // Clear shadow
    CGContextRestoreGState(currentContext)
}

Ich würde mich über einen Hinweis freuen, wo in diesem Code nach dem Fehler gesucht wird, damit ich ihn beheben kann. Vielen Dank.

58
DrScott

Ich habe diesen Fehler auch mit der neuen Version von Beta6 erhalten, die erst Stunden nach dem Ziehen der schlechten Version veröffentlicht wurde.

Ich habe diesen und andere ähnlich unleserliche Fehler behoben, indem ich den Inhalt des abgeleiteten Ordners gelöscht habe. Sie können herausfinden, wo sich dieser Ordner befindet, indem Sie auf Einstellungen> Speicherorte klicken.

Der Standardpfad lautet:/Users/[Ihr Benutzername]/Library/Developer/Xcode/DerivedData

Sie können auch Option gedrückt halten, während das Produktmenü in Xcode geöffnet ist. Dadurch ändert sich Clean in Clean Build Folder ... und Sie können dieselbe Aufgabe ausführen, ohne nach Ordnern suchen zu müssen.

120
Paul Ardeleanu

Eine weitere Ursache für diesen Fehler (mit Xcode 6.1.1 und Xcode 6.2 Beta 3) ist die Angabe einer Enumeration mit nur einem Fall in einer Klasse und die Deklaration einer Variablen dieses Typs in einer zweiten Klasse.

Dieser Code verursacht einen Linker-Fehler:

class ClassA {
    enum ExampleEnum {
        case Option1
    }
}

class ClassB {
    var example: ClassA.ExampleEnum = .Option1
}

Dies wird es beheben.

class ClassA {
    enum ExampleEnum {
        case Option1
        case Option2 // Added a second case
    }
}

class ClassB {
    var example: ClassA.ExampleEnum = .Option1
}

Radar für weitere Informationen und ein Beispielprojekt: http://openradar.appspot.com/19369147

Eine Aufzählung mit nur einem Fall ist in der Praxis ziemlich nutzlos und daher optimiert der Compiler sie wahrscheinlich weg oder so. Ich traf dies, als ich ein neues Projekt einrichtete und eine Aufzählung für später zu bestimmende Erfolge verwendete und nur einen Platzhalter hatte.

Beachten Sie auch: Verwenden Sie Watchdog http://watchdogforxcode.com/ , um sich keine Gedanken über Probleme mit abgeleiteten Daten machen zu müssen.

7
Dave Wood

Für andere Leute, die über diesen Fehler stolpern könnten. Ich hatte dies, als ich CocoaPods implementierte und das Other Linker Flags Meines Ziels nicht auf $(inherited) setzte

1
Roland Keesom