假设我需要与提供协议的类进行通信,并在操作完成时调用委托方法,如下所示:
@protocol SomeObjectDelegate
@required
- (void)stuffDone:(id)anObject;
- (void)stuffFailed;
@end
@interface SomeObject : NSObject
{
}
@end
Run Code Online (Sandbox Code Playgroud)
现在,我已经决定,虽然我可以创建另一个类实现stuffDone:委托方法,但我决定将该进程封装到一个块中,该块写在靠近SomeObject实例化,调用的地方等等.我怎么可能做这个?或者换句话说,如果你看看这对块著名的文章(在替换回调段); 我如何在SomeObject中编写一个接受各种类型的方法completionHandler:?
我喜欢积木,当我不能使用它时会让我感到难过.特别是,每次我使用委托时都会发生这种情况(例如:使用UIKit类,主要是预阻塞功能).
所以我想知道......使用ObjC的疯狂力量,做这样的事情是否可能?
// id _delegate; // Most likely declared as class variable or it will be released
_delegate = [DelegateFactory delegateOfProtocol:@protocol(SomeProtocol)];
_delegate performBlock:^{
// Do something
} onSelector:@selector(someProtocolMethod)]; // would execute the given block when the given selector is called on the dynamic delegate object.
theObject.delegate = (id<SomeProtocol>)_delegate;
// Profit!
Run Code Online (Sandbox Code Playgroud)
performBlock:onSelector:
如果YES,怎么样?我们不应该尽可能多地这样做吗?
编辑
看起来有可能.目前的答案集中在问题的第一部分,即如何.但是对" 我们应该这样做 "的部分进行一些讨论会很好.
按下视图的"删除"按钮.该视图属于视图控制器,用于处理按钮按下.但是,该视图控制器是容器视图控制器的子代,因此它向其委托发送一个请求删除的消息,并包含应删除的对象.
委托(父视图控制器)接收通知并呈现a UIActionSheet以确认删除.它还使自己成为该行动表的代表.
用户确认删除,父视图控制器准备删除该对象.除非必须这样做actionSheet:didDismissWithButtonIndex:.到那时,它不再知道从子视图控制器传递了哪个对象.
有没有办法将一个对象附加到警报表,以便当它被解除动作时,可以检索该对象?