这与旧项目与新项目无关,而是您使用的 SDK 的一个因素。您遇到的问题是,虽然这是一个编译器功能,但它需要 SDK 支持。iOS 5 SDK 不提供这种支持,但 iOS 6 SDK 提供。
因此,现在您应该只使用 iOS 6 SDK。如果您想在 iOS 5 SDK 中使用对象下标,请继续阅读。
您需要做的就是添加一个头文件,以便编译器尝试调用。无需添加实现;它由 自动处理arclite
。(如果您不使用 ARC,则必须强制链接器包含arclite
. 但您仍然不必实际切换到它。)
创建一个新的接口文件NSObject+subscripts.h。
#if __IPHONE_OS_VERSION_MAX_ALLOWED < 60000
@interface NSDictionary(subscripts)
- (id)objectForKeyedSubscript:(id)key;
@end
@interface NSMutableDictionary(subscripts)
- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key;
@end
@interface NSArray(subscripts)
- (id)objectAtIndexedSubscript:(NSUInteger)idx;
@end
@interface NSMutableArray(subscripts)
- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx;
@end
#endif
我已经把这个块放在了github 上。
NSObject
注意:在解释如何将它们仅添加到相关对象之前,我曾经建议添加所需的方法。回想起来,我认为这是我的错误。它导致在运行时而不是编译时捕获错误,这与这里现在介绍的方法不同。这种方法仍然在我的博客上,但我现在认为它更像是一种很酷的 hack,而不是一种有用的方法。
来源: