2012-02-10 29 views
0

我的報告已經得到我的確認,其中一個應用程序的功能中的一個功能打破了10.7.3。經調查,似乎10.7.3在NSDictionary上引入了私人的-stringForKey:方法。Mac OS X 10.7.3增加 - [NSDictionary stringForKey:]方法?

[NSDictionary respondsToSelector:@selector(stringForKey:)]返回NO,正如人們所期望的那樣。

但我對NSDictionary一類方法來實現-stringForKey:方法,如下所示(因此它可以被用於NSNumberNSDate值太)。在10.7.2及更早的版本中,它工作正常;在10.7.3下,它返回nil。直接獲取對象和描述可以正常工作。所以它一定是一個類別衝突。

- (NSString *)stringForKey:(id)key; 
{ 
    return [[self objectForKey:key] description]; 
} 

我想這是有利於前綴類方法的另一種說法,儘管advice I got from an Apple Application Frameworks Evangelist

其他人能證實這一點嗎?我認爲這不是第三方應用程序衝突;我認爲這是10.7.3的變化。

回答

2

您應該總是您在框架類上創建的前綴類別方法。毫無疑問。 10.7.3是否引入了這個方法並不重要,你沒有使用前綴聲明它是錯誤的。

順便說一句,測試[NSDictionary respondsToSelector:@selector(stringForKey:)]不一定會工作。 NSDictionary是一個類集羣,所以你只需要抽象超類,而私有方法只能存在於具體的子類中。

+0

好吧,由於蘋果在前綴方面存在不一致的看法(請參閱我的鏈接帖子),但它並不十分清晰。 – Dejal 2012-02-10 23:52:47

+0

不過,關於類集羣的好處。 – Dejal 2012-02-10 23:53:35

+1

@Dejal:「蘋果」不是一個對所有東西都有一種意見的單一實體。只需查看各種示例代碼中的樣式混合。既然你沒有發佈你從傳道者那裏得到的實際迴應,我無法分辨你對他所說的話的解釋是否正確,但這並不重要。簡單的事實是,你應該總是在框架類上聲明前綴類別方法。沒有理由不這樣做,而且正如你發現的那樣,有一個很大的理由要這樣做。 – 2012-02-11 00:01:12