2012-10-10 61 views
3

在網上下一個HOWTO的課程方案,我碰到下面的代碼:流浪@與NSDictionary的定義

NSDictionary *address = @{ 
    (NSString *)kABPersonAddressStreetKey: _address.text, 
    (NSString *)kABPersonAddressCityKey: _city.text, 
    (NSString *)kABPersonAddressStateKey: _state.text, 
    (NSString *)kABPersonAddressZIPKey: _zip.text 
}; 

,不會XCode中4.5.1編譯。在節目

  1. 流浪 '@'
  2. 之前預期的 '}':我得到兩個錯誤 ':' 令牌

缺少什麼我在這裏?另外,我在哪裏可以找到有關NSDictionary對象的快捷方式聲明的文檔? Google這樣的語法很難。

+0

什麼iOS版本在編譯它? – Ravi

回答

4

這是Obj-C Literals,因爲LLVM 4.0中引入的一部分。確保你使用的是正確的iOS版本。翻譯成原來的pre-llvm 4.0語言,NSDictionary分配看起來是這樣的:

NSDictionary *address = [[NSDictionary alloc] initWithObjectsAndKeys: 
         (NSString *)kABPersonAddressStreetKey, _address.text, 
         (NSString *)kABPersonAddressCityKey, _city.text, 
         (NSString *)kABPersonAddressStateKey, _state.text, 
         (NSString *)kABPersonAddressZIPKey, _zip.text, 
         nil]; 
+0

解決。我使用的是較舊版本的Xcode(在Snow Leopard上)。我不確定它到底是什麼版本,但升級到Lion導致Xcode提示我升級LLVM和其他一些組件,現在這種語法可以工作。謝謝! – jwoww

5

這是現代目標c的一部分,它被稱爲客觀的c litterals。 此代碼應該運行良好,也許你正在使用和舊的編譯器,請確保你正在使用最後的編譯器(當前LLVM 4.1)