我对后端编程和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解决方案。
答案 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
}