2012-09-11 38 views
1

我的問題很簡單。我想在iOS中擴展NSMutableData類並重寫NSMutableData中定義的一些方法。對於例如我想用我自己的包裝器實現覆蓋writeToFile函數。 可以做到這一點嗎?擴展NSMutableData類

我TestNSMutableData.h

@interface TestNSMutableData : NSMutableData 
-(BOOL)writeToFile:(NSString*)path atomically:(BOOL)useAuxiliaryFile; 
@end 

我TestNSMutableData.m

@implementation TestNSMutableData 
-(BOOL)writeToFile:(NSString*)path atomically:(BOOL)useAuxiliaryFile{ 
    //Some activity on the data and modifying it 
    return [self writeToFile:path atomically:useAuxiliaryFile]; 
} 

當我嘗試使用TestNSMutableData在我的項目的一個像

TestNSMutableData myData; 
myData = [TestNSMutableData alloc]init]; 
[myData writeToFile:path atomically:YES] 

我得到一個錯誤如下所示

NSInvalidArgumentException - 原因'* - 僅爲抽象類定義的長度。定義 - [TestNSMutableData length]!

是否有可能重寫Native分類中定義的方法,例如: NSMutableData?

UPDATE 創建NSString類分類方法將writeToFile

我實現

-(BOOL)writeToFile:(NSString*)path atomically:(BOOL)useAuxiliary encoding:(NSStringEncoding)enc error:(NSError**)error{ 


//Manipulating NSString 
    self = manipulatedString; 
    return [super writeToFile....]; 

} 

我得到一個警告「NSObject的可能不是 '將writeToFile' 功能做出反應。這是因爲技術上是正確的NSString是從NSObject派生的,NSObject沒有writeToFile函數。

我想要的是在fil中編寫操縱字符串e而不是實際的字符串。

有沒有辦法從上面的函數調用NSString writeToFile方法。

問候,

Nirav

回答

1

NSMutableData可能是一個class cluster,使得它有點hard to subclass。爲什麼不使用類別來添加自定義的-writeToFile方法呢?

+0

如果我添加一個類別,並且方法簽名是本機所具有的,那麼無論我在哪裏實例化TestNSMutableClass,它都會給我編譯錯誤(它表示你的意思是NSMutableClass) – Nirav

+0

如果添加一個類別,那麼就沒有'TestNSMutableData', ?你不能(或不應該)重寫使用類別的方法,你將不得不添加一個具有不同簽名的方法。如果你真的需要重寫原始方法,我建議在自定義類中包裝'NSMutableData'並轉發除了被覆蓋的類之外的所有調用。或者,甚至更好,試圖以不同的方式解決您的主要問題。 – zoul

+0

謝謝Zoul!我終於實現了它使用類別(我試圖手動創建而不是使用XCode)。再次感謝 !! – Nirav