Swift beta 6 - сообщение об ошибке запутанного компоновщика
Я получаю сообщение об ошибке от компоновщика при создании программы Swift с бета-версией Xcode 6, предназначенной для iOS 8. Этот код скомпилирован и правильно работает с бета-версией 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)
}
Я был бы признателен за подсказку о том, где в этом коде искать ошибку, чтобы я мог ее исправить. Спасибо.
3 ответа
Я получил эту ошибку даже с новой версией Beta6, которая вышла через несколько часов после того, как вышла плохая.
Я решил эту и другие подобные неразборчивые ошибки, удалив содержимое папки Derived. Чтобы узнать, где находится эта папка, перейдите в "Настройки"> "Местоположения".
Путь по умолчанию: / Users / [ваше имя пользователя] / Library / Developer / Xcode / DerivedData
Вы также можете держать Option
в то время как меню продукта открыто в XCode, который изменится Clean
в Clean Build Folder
... и выполнить ту же задачу без необходимости поиска в папке.
Другая причина этой ошибки (замеченная с Xcode 6.1.1 и Xcode 6.2 Beta 3), имеет перечисление только с одним случаем в одном классе и объявление переменной этого типа во втором классе.
Этот код вызовет ошибку компоновщика:
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
Перечисление только с одним случаем довольно бесполезно на практике, и поэтому компилятор, вероятно, оптимизирует его или что-то в этом роде. Я столкнулся с этим при создании нового проекта, используя перечисление для достижений, которые будут определены позже, и у меня был только 1 заполнитель.
Также обратите внимание: используйте Watchdog http://watchdogforxcode.com/ чтобы не беспокоиться о проблемах с производными данными.
Для других людей, которые могут наткнуться на эту ошибку. У меня было это при реализации CocoaPods
и не устанавливая мою цель Other Linker Flags
в $(inherited)