【问题标题】:Extending NSMutableData class扩展 NSMutableData 类
【发布时间】:2012-09-11 07:14:29
【问题描述】:

我的问题很简单。我想在 iOS 中扩展 NSMutableData 类并覆盖 NSMutableData 中定义的一些方法。例如我想用我自己的包装器实现覆盖 writeToFile 函数。 可以这样做吗?

我的 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'- reason '* - 长度仅为抽象类定义。定义 -[TestNSMutableData 长度] !

是否有可能覆盖 Native 中定义的方法,例如NSMutableData ?

更新 我为 writeTofile 创建 NSString 类类别方法

我的实现是

-(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 函数。

我想要的是在文件中写入被操纵的字符串,而不是实际的字符串。

有没有办法从上面的函数中调用 NSString writeToFile 方法。

问候,

尼拉夫

【问题讨论】:

    标签: iphone nsmutabledata


    【解决方案1】:

    NSMutableData 可能是class cluster,使它有点hard to subclass。为什么不使用类别来添加自定义-writeToFile 方法呢?

    【讨论】:

    • 如果我添加一个类别并且方法签名是本机所具有的,那么无论我在哪里实例化 TestNSMutableClass,它都会给我编译错误(它说你的意思是 NSMutableClass)
    • 如果你添加一个类别,就没有TestNSMutableData,对吧?您不能(或不应该)使用类别覆盖方法,您必须添加具有不同签名的方法。如果您确实需要覆盖原始方法,我建议将 NSMutableData 包装在自定义类中并转发除被覆盖的调用之外的所有调用。或者,更好的是,尝试以不同的方式解决您的主要问题。
    • 谢谢祖尔!!我终于使用 Category 实现了它(我试图手动创建而不是使用 XCode)。再次感谢!!
    猜你喜欢
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2010-10-12
    • 2012-06-27
    相关资源
    最近更新 更多