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

1 回答 1

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{
}

如果您没有相同线程的保证,您可以使用来确保变量的增量(以及与 2 的比较)将是原子的。

于 2013-02-15T17:38:56.373 回答