1

IOS でいくつかのデータベース操作を行っています。基本的に、これをバックグラウンド スレッドで実行したいと考えています。GCDを使ってみました。しかし、私にとっての問題は、このプロセスが終了した後に、このプロセスからいくつかの値を取得したいということです。アイテムをデータベースに挿入する前に、アイテムが既に存在するかどうかを確認します。以下のコードを参照してください

__block Boolean isExisting = false;
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
                                             (unsigned long)NULL), ^(void) {
        NSString *path = [SqliteManager initDatabase];
        if(sqlite3_open([path UTF8String], &database) == SQLITE_OK)
        {
            NSString *query = [NSString stringWithFormat:@"select count (campaignId) from POTC where Id='%@' and taskid='%@' and pocId='%@' and userId='%@'",[submission.campaignId  stringRepresentation],[submission.taskId stringRepresentation],[submission.pocId stringRepresentation],[[UUID UUIDWithString:submission.userId] stringRepresentation]];
            const char *sql = [query cStringUsingEncoding:NSASCIIStringEncoding];
            sqlite3_stmt *selectStatement;
            if (sqlite3_prepare_v2(database, sql, -1, &selectStatement, NULL) == SQLITE_OK)
            {
                while (sqlite3_step(selectStatement) == SQLITE_ROW)
                {
                    if (sqlite3_column_int(selectStatement, 0) >0)
                    {
                        isExisting = true;
                        break;
                    }
                }
                sqlite3_finalize(selectStatement);
            }
            sqlite3_close(database);
        }
        return isExisting;
    });

しかし、dispatch-async は void コード ブロックを想定しているため、return ステートメントを含む上記のコードは機能しません。IOSで同じことを達成するにはどうすればよいですか? IOS のアニメーション完了ブロックに似たものはありますか?

4

4 に答える 4

0

isExisting は true になり、ブロック実行の完了後にその値にアクセスすると true が返されるため、何かを返す必要はありません。

于 2013-10-24T11:56:56.860 に答える