Swift beta 6 – 混淆链接器错误消息
当使用Xcode 6 beta 6构buildSwift程序时,我从链接器收到错误消息,定位到iOS 8.此代码编译并正确运行beta 5。
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
这里是有问题的代码:
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) }
我将不胜感激这个代码在哪里寻找错误,所以我可以修复它。 谢谢。
即使在新版本的Beta6版本发布之后,我也得到了这个错误。
我已经通过删除派生文件夹的内容解决了这个和其他类似难以辨认的错误。 您可以通过转到“首选项”>“位置”来find该文件夹所在的位置。
默认path是:/ Users / [你的用户名] / Library / Developer / Xcode / DerivedData
您也可以在Xcode中打开产品菜单的同时按住Option
,该菜单将更改“ Clean
到“ Clean Build Folder
,并且无需进行文件夹search即可完成相同的任务。
这个错误的另一个原因(见Xcode 6.1.1和Xcode 6.2 Beta 3)是在一个类中只有一个枚举的枚举,并在第二个类中声明该types的variables。
此代码将导致链接器错误:
class ClassA { enum ExampleEnum { case Option1 } } class ClassB { var example: ClassA.ExampleEnum = .Option1 }
这将解决它。
class ClassA { enum ExampleEnum { case Option1 case Option2 // Added a second case } } class ClassB { var example: ClassA.ExampleEnum = .Option1 }
雷达了解更多信息和示例项目: http : //openradar.appspot.com/19369147
一个只有一个case的枚举在实践中是无用的,所以编译器可能会优化它。 我在创build一个新项目的时候遇到了这个问题,后来用一个枚举来取得成就,只有一个占位符。
另请注意:使用Watchdog http://watchdogforxcode.com/可避免担心派生数据问题。;
对于其他人可能会绊倒这个错误。 我在实现CocoaPods
没有设置我的目标的Other Linker Flags
为$(inherited)