2014-09-02 40 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

相關問題