[英]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已經這樣做了。
在子類中,您必須覆蓋它們的兩個基本方法:
1. setObject:forKey:
2. removeObjectForKey:
您還必須覆蓋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.