簡體   English   中英

子類化NSMutableDictionary

[英]Subclassing NSMutableDictionary

我試圖實現一個NSMutableDictionary的子類,它返回nil而不是在字典中不存在鍵時拋出NSUndefinedKeyException。

但是,當我嘗試將對象添加到我的字典中時,我得到了

[NSMutableDictionary setObject:forKey:]: method only defined for abstract class

NilDictionary.h

@interface NilDictionary : NSMutableDictionary {
} 
@end

NilDctionary.m

@implementation NilDictionary
- (id)valueForUndefinedKey:(NSString *)key {
  return nil;
}
@end

我是否真的必須在我的子類中再次實現NSMutableDictionary中的所有方法,或者是否有其他類我應該進行子類化?

澄清 :我原來的問題歸結為我無法正確閱讀文檔。

如果你需要子類NSMutableDictionary,請檢查正確的答案。 如果你想要一個在你的密鑰不存在時返回nil的字典,NSMutableDictionary已經這樣做了。

NSMutableDictionary類參考說:

在子類中,您必須覆蓋它們的兩個基本方法:

1. setObject:forKey:
2. removeObjectForKey:

您還必須覆蓋NSDictionary類的基本方法。


NSDictionary類參考說:

如果確實需要子類NSDictionary ,則需要考慮由Class cluster表示的 - 因此,這些方法在概念上基於幾種原始方法:

數數
2. objectForKey:
3. keyEnumerator
4. initWithObjects:forKeys:count:

在子類中,您必須覆蓋所有這些方法。

NSDictionary's其他方法通過調用這些原語中的一個或多個來操作。 非原始方法提供了一次訪問多個條目的便捷方式。


您似乎需要覆蓋所有這六個方法,以使您的NSMutableDictionary子類完美運行。

這是你的問題。 NSDictionary (及其可變對應物)是類集群的一部分( 在這里 ,在“類集群”標題下閱讀更多關於它們的內容),並且不應該被子類化,因為它會導致諸如你所提到的問題(閱讀子類注釋)在NSDictionary類參考中 )。 無論你需要做什么,你都有辦法擴展你想要使用的類,以便做你想做的事。 例如,上面的代碼可以很容易地放在一個類別中( 在這里閱讀更多關於類別的內容)。

當你傳入“nil”代表KEY(不是值)時,你確定你沒有得到異常嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM