Intereting Posts
Ошибка выполнения выполнения HttpClient: ExecutionEngineException – попытка скомпилировать метод JIT с помощью параметра -aot-only Fatal 'слишком большой, не может кодировать «адрес памяти в gcc (приложение iPhone) Swift3 Firebase извлекает данные Соотношение между эффективными ценами за тысячу показов и показами Покрытие кода Xcode9 не отображается Предупреждение: «libsystem_network» содержит сценарий отладки iOS Crittercism – чистый сбор данных отключен Как изменился стандартный режим разговора в iOS 9? Преобразование массива пути изображения в кодировку base64.? Видео иногда перевернуто при загрузке на Facebook Swift iOS не распознает импорт библиотеки GCM? Как скрыть сегментированный контроль? Показывать предупреждение при нажатии на ссылку Сохранение и восстановление состояния iOS при совместном использовании данных между контроллерами представлений Сброс содержимого UIScrollView автоматически сбрасывается

Внедрение NSOperationQueue путем отправки запроса и сохранения ответа в базе данных параллельно

Я выполнил NSOPERATIONQUEUE. Отправляя запрос, и я могу загрузить ответ с сервера, но проблема в том, что я не могу параллельно обрабатывать sqlite для вставки / обновления ответа, я получаю ошибку блокировки базы данных. Может ли кто-нибудь предложить мне решение работать с базой данных для вставки / обновления моего загруженного ответа?

Я создал класс NSOperation как PageLoadOperation, и я передам запрос 7 раз этому классу NSOperation и добавлю его в очередь, как показано ниже

PageLoadOperation *pageLoad=[[PageLoadOperation alloc]initWithRequest:theRequest]; [queue addOperation:pageLoad]; 

В Main я могу отправить запрос ниже NSURLConnection

 [NSURLConnection sendAsynchronousRequest:theRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { [self openConnection]; [self doSomethingWithData:data]; [self closeConnection]; }]; 

и в doSomethingWithData метод i будет вставлять / обновлять ответ, преобразовывая данные в NSString. У меня есть отдельно созданный метод для открытия соединения с базой данных, и после завершения ввода / обновления я закрою соединение следующими способами

 -(BOOL)openConnection { database=nil; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES); documentsDir = [paths objectAtIndex:0]; if(sqlite3_open([[documentsDir stringByAppendingPathComponent:@"DataStore"] UTF8String], &database)==SQLITE_OK) { NSLog(@"DB Connection Established successfully"); return YES; } else { NSLog(@"DB not connected"); return NO; } } -(BOOL)closeConnection { NSLog(@"%@",documentsDir); if(sqlite3_close(database)==SQLITE_OK) { NSLog(@"DB Connection closed successfully"); return YES; } else { NSLog(@"Error Failed to close DB because %s",sqlite3_errmsg(database)); return NO; } } 

Мой метод вставки:

  - (void) addToDatabase :(NSString*) sqlstmt :(NSArray *)params { sqlite3_stmt *addStmt; if(sqlite3_prepare_v2(database, [sqlstmt UTF8String], -1, &addStmt, NULL) != SQLITE_OK) NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database)); else { for (i=1; i<=[params count]; i++) { sqlite3_bind_text(addStmt, i,[[params objectAtIndex:i-1] UTF8String], -1, SQLITE_TRANSIENT); } } if(SQLITE_DONE != sqlite3_step(addStmt)) NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database)); else NSLog(@"%lld",sqlite3_last_insert_rowid(database)); sqlite3_finalize(addStmt); 

}

При добавлении в базу данных я получаю ошибку блокировки базы данных, потому что, когда один ответ открыт, база данных и вставка в базу данных параллельно, другой ответ пытается открыть соединение с базой данных, так как я могу решить эту проблему?