2014-09-04 46 views
0

我无法理解如何用类扩展中写入的readwrite方法覆盖只读方法。我在头文件中有一个只读方法,而在我的实现文件中,我尝试使用类扩展来覆盖此方法。我刚才在这个线程中询问了这个问题,我在这里包含了我所指的代码:Having trouble with class extension in Objective C, mac OS. Getting error 'NSInvalidArgumentException', no visible @interface declares the selector目标C类扩展 - 如何用readwrite方法覆盖只读?

这里是:Objective-C Succinctly: Categories and Extensions是我正在使用的另一个源,它让我相信我应该能够覆盖声明的只读属性在我的头文件中使用类扩展名的readwrite属性。如果我错了,请纠正我,我是一个完全新手,试图找出基本知识。

+0

呃,什么是“读写方法”? – 2014-09-05 00:01:27

+0

对不起我的意思是财产,readwrite意味着有一个默认的getter和setter。 – mepstein1218 2014-09-05 14:15:59

回答

0

诀窍是你不要覆盖。 您重写。 您可以编写一个只读方法,添加所需的任何处理,然后调用super并返回结果或提供自定义结果。 (参考您自己的伊娃或财产或提供计算结果)

确定您的编辑完成后。

方法略有不同。 你在谈论属性。 Objective-C中的一个属性基本上是声明一个ivar或实例变量,它将(通常)具有标准的setter和getter方法。那些设置或获得伊娃的价值。

如果在头文件中有一个只读属性,或者从超类继承(在头文件中有效),那么是的,通常的做法是将该属性重新声明为在.m或实现文件中读写。 您添加一个类扩展部分。 类扩展基本上是类中的一个未命名的类。

例子。

In .h 

@interface Cat : NSObject <> 
@property (readonly) NSInteger countOfCatTails; 
@end 

In .m 
@interface Cat() 
@property NSInteger countOfCatTails; 
@end 
+0

对不起,我很难理解你在说什么,我不习惯很多编码术语。 “增加任何处理”是什么意思? 当你说“返回结果”时,你指的是什么结果? 最后,你用括号指的是什么? – mepstein1218 2014-09-05 14:28:09

+0

这实际上正是我所拥有的,但是我得到的错误是“XYZPerson没有可见的@interface”声明选择器“setHeight”。 – mepstein1218 2014-09-05 17:45:37

+0

此时您需要发布您的代码。 – uchuugaka 2014-09-05 17:57:50