2016-01-21 48 views
0

我有类A,它被设置为类B的委托。它当前如何工作是来自类A的方法,它使用类B的实例来调用方法。在B的方法执行完毕后,它调用A中实现的委托方法。如何在委托中使用完成块

想要的是让A类的方法包含一个成功完成块,这样当B的方法完成执行时,我可以从A类中的方法与B的方法成功执行相同。这可以做到吗?

回答

0

在A类中,将块存储为属性。在B类的委托方法中(由A类实现),您可以通过属性调用该块。

@property (nonatomic, copy) void (^completion)(BOOL); 

- (void)classAMethod:(void (^)(BOOL))completion { 
    self.completion = completion; 
    [classB method]; 
} 

- (void)classBDelegateMethod:(BOOL)result { 
    if(self.completion) { 
     self.completion(result); 
    } 
} 
+0

您需要在调用'-classBDelegateMethod'之前检查'completion'是非'nil',否则应用程序会崩溃。您还可能想要确保您不覆盖'-classAMethod:'中的现有块,否则可能不会按预期调用块。您可能想要存储一组块。 –

+0

更新了答案。至于完成数组,它取决于classAMethod的性质。您可能希望允许它并行运行多次,或一次执行一次执行。如果它是前者,那么完成数组是有意义的。 – Mark

+0

@Mark我认为这是我正在寻找的。如果我想要将BOOL传递给我的classBDelegateMethod以便classAMethod获取它,我该如何更改它? – iamarnold