2013-02-15 78 views
3

当我确信两个模块代码都已返回时,我该如何触发一种方法?是这样的...最后一个模块返回时的触发方法

// Retrieve Messages Array from Parse 
[ParseManager retrieveAllMessagesForShredderUser:(ShredderUser *)[PFUser currentUser] withCompletionBlock:^(BOOL success, NSError *error, NSArray *objects){ 
     self.messagesArray = objects; 
    }]; 

// Retrieve MessagesPermissions Array from Parse 
[ParseManager retrieveAllMessagePermissionsForShredderUser:(ShredderUser *)[PFUser currentUser] withCompletionBlock:^(BOOL success, NSError *error, NSArray *objects){ 
     self.messagePermissionsArray = objects; 
    }]; 

-(void)methodToRunWhenBothBlocksHaveReturned{ 
} 

回答

4

如果你能保证块将在同一个线程(即UI线程)上执行,那么选择很简单,使用__block变量。

-(void)yourMethod { 
    __block int count = 0; 
    [ParseManager retrieveAllMessagesForShredderUser:(ShredderUser *)[PFUser currentUser] withCompletionBlock:^(BOOL success, NSError *error, NSArray *objects){ 
     self.messagesArray = objects; 
     count++; 
     if (count == 2) { 
      [self methodToRunWhenBothBlocksHaveReturned]; 
     } 
    }]; 

    [ParseManager retrieveAllMessagePermissionsForShredderUser:(ShredderUser *)[PFUser currentUser] withCompletionBlock:^(BOOL success, NSError *error, NSArray *objects){ 
     self.messagePermissionsArray = objects; 
     count++; 
     if (count == 2) { 
      [self methodToRunWhenBothBlocksHaveReturned]; 
     } 
    }]; 
} 

-(void)methodToRunWhenBothBlocksHaveReturned{ 
} 

如果不具有相同的线程保证,你可以使用一个lock,以确保该变量(和比较2)的增量将是原子。

+0

正是我在找的,谢谢 – Alan 2013-02-16 22:43:32

相关问题