将对象附加到UIActionSheet

Ben*_*ard 2 cocoa-touch objective-c uiactionsheet

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

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

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

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

小智 5

Objective-C 2.0运行时支持关联对象 - 使用此API,您可以使用键值方法将对象相互关联.例:

id someObject = // however you obtain it
objc_setAssociatedObject(theActionSheet, "AssociatedDelegateObject", someObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

// later try to get the object:
id someObject = objc_getAssociatedObject(theActionSheet, "AssociatedDelegateObject");
// process the associated object, then release it:
objc_removeAssociatedObjects(theAlertSheet);
Run Code Online (Sandbox Code Playgroud)

编辑:似乎你真的不需要射鸟来使用大炮并使用运行时函数,因为管理警报表的同一类/对象也关心委托,所以你可以暂时将它分配给一个实例变量.但是,当您的对象模型变得更复杂时,此方法可能更容易扩展.