有一个概念性的问题: 我想有一个包装类,它将所有被调用的选择器转发给给定的对象。我该怎么做?
原因如下: 我有一个用于与服务同步数据的库。我使用Core Data。 对于库,我必须创建特定协议的类。但是我不能对Core Data子类使用相同的协议。
我的想法是创建特定协议的子类并将协议调用转发给核心数据对象。 但是每个子类有许多子类和许多属性,并且没有更改Core Data子类(项目特定要求!)
有没有办法在不覆盖每个方法的情况下执行此操作?
感谢您的时间=)
答案 0 :(得分:1)
您的具体问题的答案是肯定的。 Message Forwarding包含您需要的一切。
我想你可能想退一步评估其他选择。例如,您是否可以将此功能添加到基类而不是代理类。
答案 1 :(得分:1)
实施-forwardingTargetForSelector:
。您可以返回另一个对象以转发未知消息。如果这是您的课程的大部分内容,您可能只想从NSProxy
而不是NSObject.
继承(NSProxy
,这样做的好处是它不会实现所有标准{ {1}}方法,所以你也可以转发它们。)
这种方法的一个常见问题是编译器会抱怨您的类没有响应您发送它的选择器。解决此问题的常用方法是要求对象的用户将其声明为NSObject
。这通常也很不方便,所以如果不可能采用其他方法,这是最后的手段。
但通常更好的方法是使您的类成为目标的子类,并添加协议所需的其他方法。或者,您可以通过类别将其他方法添加到Core Data类。