我在苹果IOS开发者论坛上发布了这个问题,但很少有人回复。我希望StackOverflow的专业人士能提供帮助……
我正在使用Swift开发iOS 8应用。在Xcode beta 5中,下面的代码可以正常工作,但在beta 6和beta 7中给我一个链接错误:
var sqlStr = "SELECT count(*) as count FROM nouns WHERE bucket = ?;"
var rs = db.executeQuery(sqlStr, withArgumentsInArray: [0] as NSArray)
链接错误是:
Undefined symbols for architecture x86_64:
__TFSs26_forceBridgeFromObjectiveCU__FTPSs9AnyObject_MQ__Q_", referenced from:
__TFC8les_Mots13WordGenerator9getBucketfS0_FT_Si in WordGenerator.o
(getBucket是UIViewController WordGenerator中的一个方法。如果我将该方法缩减为仅这两行,则会得到相同的错误,如果我将这两行注释掉,错误就会消失,所以我知道问题出在这里。)
db.executeQuery()是具有以下签名的FMDB方法:
- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments;
如果我将代码更改为这样,在所有测试版中都可以正常工作:
var sqlStr = "SELECT count(*) as count FROM nouns WHERE bucket = '\(whereClause)';"
var rs = db.executeQuery(sqlStr, withArgumentsInArray: nil)
从链接错误和我试图调试的情况来看,似乎将类型为 AnyObject 的[0]转换为所需的 NSArray 失败了。 我正在使用此示例,但在应用程序的其他区域中也遇到了类似的问题,所有这些区域都需要将 AnyObject 强制转换为 NSArray 或 NSDictionary 。
上面的原始代码在Xcode beta 5中运行得很好,但在后续beta版本中却没有。 显然,我不理解AnyObject到NSArray cast的某些内容,但我确实不知道是什么,并且似乎beta 5和6实施了以前未实施的内容。 我尝试了各种明确的强制转换,但没有成功。
非常感谢您的帮助。