2014-09-02 42 views
3

我在苹果IOS开发人员论坛上发布了这个问题,但显然缺乏响应。我希望StackOverflow向导可以帮助...Swift应用程序 - 从AnyObject投射到NSArray似乎失败

我正在开发一个使用Swift的iOS 8应用程序。在Xcode的β5的下方码的代码的工作,但给我一个连接错误中的β6和β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) 

从连接错误和我的考验,和努力调试此,看来中投[0 ],这是类型AnyObjectNSArray,这是必需的,是失败的。我使用这个例子,但我看到类似的问题,在其他地区的应用程序,所有的地方都必须被投掷到一个AnyObject NSArrayNSDictionary

上面的原始代码在Xcode beta 5中工作得很好,但在随后的beta版中不能运行。很显然,我并不了解AnyObject到NSArray的演员阵容,但如果我知道什么是我会感到厌烦,而且似乎beta5和6强制执行了以前没有强制执行的内容。我尝试过所有我能想到的明确演员,但都没有成功。

任何帮助将非常感激。

+0

我有同样的问题,并尝试所有建议的测试版6的解决方案:http:// stackoverflow。com/a/25376271/887210无济于事。希望有人能够就这个问题提出一些见解! – 2014-09-03 01:47:09

+0

您可能需要提供更多的上下文来获得有关此问题的帮助。我试图用一个简单的测试类来复制这个问题,该测试类具有该签名的方法,并且使用Xcode 6 beta 7编译时没有任何困难。 – ColGraff 2014-09-03 12:38:08

+0

我删除了派生数据并清理了构建和中间文件夹的次数超过了我的数量,没有成功。我不知道我可以提供什么额外的上下文。我还用上面的语句编写了一个测试类,并导致相同的链接器错误。我很感激你的回应 - 它告诉我有人正在使它工作! – johnz 2014-09-03 15:05:11

回答

-1

我想你可能会遇到同样的问题,因为贴在这里:

https://stackoverflow.com/a/25376271/887210

基本上你需要按照该链接的步骤做一个干净的构建。

我试着用下面的代码操场在Xcode 6 Beta版6,它似乎正常工作:

import Foundation 
let a:AnyObject = [0] as NSArray 
if a is NSArray { 
    print("yep") 
} 
else { 
    print("nope") 
} 

结果:

[0] 
"yep" 
+0

感谢您的回复。我在操场上得到同样的东西。如果它不是“[0]作为NSArray”代码,那一定还有其他的东西,但是如果我知道什么的话,我会感到厌烦! – johnz 2014-09-03 15:07:16

1

我改变生成的位置和现在的代码编译,链接和运行。以前,构建位置是自定义/相对于工作区;我将其更改为独特。

我不知道为什么这会改变事情,因为我删除了派生数据并且多次清理了构建文件夹。但是...它的工作,所以如果任何人有同样的问题,试试这个。

+0

有趣。我认为这与二进制文件有关。在干净构建时你是否尝试按下选项键?快捷键是option-shift-command-k,如果你按住选项键,菜单项是Product-> Clean Build Folder ... – ColGraff 2014-09-03 15:37:27

+0

我永远不能通过菜单来做到这一点 - Clean Build Folder菜单项总是灰显出。我手动删除了我能找到的所有东西,但也许我错过了一些东西。无论如何,感谢您的关注和帮助。 – johnz 2014-09-03 17:10:58

相关问题