2016-01-21 47 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