我有一本字典,我从一个plist中读到。我想创建一个NSDictionary
的子类来实现类似下面的内容,这样我就可以避免在源代码中的任何地方使用@"key name"
:
@interface MyDict{
}
-(NSString*) textString;
@end
@implementation MyDict
-(NSString*) textString {
return [self objectForKey:@"textString"];
}
@end
在我的另一种方法中:
MyDict *d = ... // something i read from plist
NSString *str = [d textString];
当我调用该方法时,应用程序因“无法识别的选择器textString”而崩溃。这有什么不对?
答案 0 :(得分:4)
将NSDictionary分配给MyDict指针并不会使其成为MyDict实例。
您可以这样做的一种方法是创建一个类别,将您的方法添加到NSDictionary。有关信息,请参阅http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocCategories.html#//apple_ref/doc/uid/TP30001163-CH20-SW1。
答案 1 :(得分:2)
你的班级没有超类。此外,传统观点认为,NSDictionary
的子类很难,因为它是class cluster。当你:
NSDictionary
NSDictionary * myDict = [NSDictionary dictionary];
你得到一个私有子类(在这种情况下为NSCFDictionary
)。
您可能想尝试定义自己的字典键,就像Apple一样:
NSString * const MyWonderfulUnicornKey = @"MyWonderfulUnicornKey";