我是一个非常绿色的nubie,无论如何,我正在通过一个教程来指导我使用NSLocale类获取本地货币,如下所示:
NSLocale *here = [NSLocale currentLocale];
NSString *currency = [here objectForKey:NSLocaleCountryCode];
NSLog(@"Money is %@", currency);
所以,我知道我正在创建一个名为'here'的NSLocale类的实例,然后我向'here'对象发送一条消息,询问objectForKey,并将结果返回给NSString,称为'currency' 。最后,我使用NSLog打印货币值。
好的,所以这是我的问题,然后我回顾了NSLocale类上的其他方法,我找到一个名为'preferredLanguages',它返回一个首选语言的数组。所以我虽然会调用那个方法,然后将它打印到日志中,只是为了笑容并帮助我学习。离开上面的例子,我想我会这样称呼它。从我上面的代码中已经有一个名为'here'的NSLocale类的实例开始,我认为我只需要以下内容(我正在重复上面的三行,所以这里很容易阅读。)
NSLocale *here = [NSLocale currentLocale];
NSString *currency = [here objectForKey:NSLocaleCountryCode];
NSLog(@"Money is %@", currency);
NSArray *prefLangs = [here preferredLanguages];
NSLog(@"Preferred Languages are: %@", prefLangs);
但是这没有用,我收到一条错误消息,上面写着“没有可见的@interface for'NSLocale'声明选择器'preferredLanguages'
我发现我必须这样做:
NSLocale *here = [NSLocale currentLocale];
NSString *currency = [here objectForKey:NSLocaleCountryCode];
NSLog(@"Money is %@", currency);
NSArray *prefLangs = [NSLocale preferredLanguages];
NSLog(@"Preferred Languages are: %@", prefLangs);
我只是不明白为什么我必须调用这样的方法:[NSLocale preferredLanguages],而不是[here preferredLanguages]。上面已经创建了'here'的实例。有人可以解释一下。
答案 0 :(得分:1)
你会很快习惯于Objective C的快乐和痛苦,但简短的回答包括查看方法声明,如下所示:
声明中的“+”表示它是一个类方法。
以下是Apple's "Learning Objective C" document
的相关段落Objective-C中的类可以声明两种类型的方法:instance 方法和类方法。实例方法是一种方法 执行范围限定为类的特定实例。其他 单词,在调用实例方法之前,必须先创建一个 班级的实例。相比之下,类方法不需要 你要创建一个实例,但稍后会更多。
如果声明以“ - ”开头,则使其成为实例方法,并且您需要实例化(创建)实例才能调用该对象上的方法。
希望到目前为止这是有道理的。