2012-10-10 56 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)