睡眠线程,直到另一个线程为iOS完成

时间:2014-09-14 06:23:51

标签: ios multithreading sleep backend amazon-dynamodb

我对后端编程和iOS编程非常陌生。我目前正在将DynamoDB集成到我的iOS应用程序中。我正在做一个注册函数,它查询数据库以检查用户名是否被占用。

以下是我的代码的主要想法:

__block BOOL isPlayerTaken = NO;

//Block of code that queries the database
//Mutates value of isPlayerTaken if player exists

    [[dynamoDBObjectMapper query:[DDBRunnerTableRow class]
                  expression:queryExpression]
 continueWithExecutor:[BFExecutor mainThreadExecutor] withSuccessBlock:^id(BFTask *task) {
     AWSDynamoDBPaginatedOutput *paginatedOutput = task.result;
     DDBRunnerTableRow *queriedRunner = paginatedOutput.items[0];
     if (queriedRunner) {
         isPlayerTaken = YES;
         NSLog(@"%@", queriedRunner.runnerName);
     }

     return nil;
 }];


return isPlayerTaken;

但是,函数在查询结果完成之前返回,因此输出始终为NO。 在查询块完成之前,如何确保函数不会返回?

非常感谢你的帮助。我相信我需要在代码的许多函数中使用它,这需要查询和插入数据,我不想为它提出一个hackish解决方案。

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

[[dynamoDBObjectMapper query:[DDBRunnerTableRow class]
                  expression:queryExpression]
 continueWithExecutor:[BFExecutor mainThreadExecutor] withSuccessBlock:^id(BFTask *task) {
     AWSDynamoDBPaginatedOutput *paginatedOutput = task.result;
     DDBRunnerTableRow *queriedRunner = paginatedOutput.items[0];
     if (queriedRunner) 
     {
         NSLog(@"%@", queriedRunner.runnerName);
         [self loginSuccessfull:queriedRunner];
     }
     else 
     {
         [self loginFailed];
     }
 }];

然后

- (void)loginSuccessfull:(DDBRunnerTableRow *)queriedRunner
{
    //whatever
}

- (void)loginFailed
{
    //whatever
}