相关疑难解决方法(0)

如何用Block简化回调逻辑?

假设我需要与提供协议的类进行通信,并在操作完成时调用委托方法,如下所示:

@protocol SomeObjectDelegate

@required
- (void)stuffDone:(id)anObject;
- (void)stuffFailed;

@end

@interface SomeObject : NSObject
{
}
@end
Run Code Online (Sandbox Code Playgroud)

现在,我已经决定,虽然我可以创建另一个类实现stuffDone:委托方法,但我决定将该进程封装到一个块中,该块写在靠近SomeObject实例化,调用的地方等等.我怎么可能做这个?或者换句话说,如果你看看对块著名的文章(在替换回调段); 我如何在SomeObject中编写一个接受各种类型的方法completionHandler:

cocoa objective-c objective-c-blocks

33
推荐指数
2
解决办法
2万
查看次数

用块创建代表

我喜欢积木,当我不能使用它时会让我感到难过.特别是,每次我使用委托时都会发生这种情况(例如:使用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,怎么样?我们不应该尽可能多地这样做吗?

编辑

看起来有可能.目前的答案集中在问题的第一部分,即如何.但是对" 我们应该这样做 "的部分进行一些讨论会很好.

macos objective-c ios objective-c-blocks

5
推荐指数
3
解决办法
1824
查看次数

将对象附加到UIActionSheet

按下视图的"删除"按钮.该视图属于视图控制器,用于处理按钮按下.但是,该视图控制器是容器视图控制器的子代,因此它向其委托发送一个请求删除的消息,并包含应删除的对象.

委托(父视图控制器)接收通知并呈现a UIActionSheet以确认删除.它还使自己成为该行动表的代表.

用户确认删除,父视图控制器准备删除该对象.除非必须这样做actionSheet:didDismissWithButtonIndex:.到那时,它不再知道从子视图控制器传递了哪个对象.

有没有办法将一个对象附加到警报表,以便当它被解除动作时,可以检索该对象?

cocoa-touch objective-c uiactionsheet

2
推荐指数
1
解决办法
1409
查看次数