Używam opakowanie FMDatabase SQLite w Objective C i mam następujący problem:SQLite Database z FMDatabase Wrapper
Używam się parsować XML i wstawić DB w wątku tło dla niektórych treści, które użytkownik nie dostęp do pracy, jednak użytkownik jest w stanie współdziałać z interfejsu użytkownika i bazy danych z sekcji one się znajdują.
The FMDatabase <FMDatabase: 0x17b7b0> is currently in use.
Losowo, dostanę „FMDatabase już w użyciu” powiadomienia i tablica nie zostanie wypełnione przez bazę danych. Byłem pod wrażeniem, że klasa FMDatabase będzie obsługiwać zapytania raz stało się wolne, ale mam:
while(contents.count < 1){
sleep(1);
}
Mając nadzieję, że gdy baza danych zwalnia, tablica zostanie wypełniona. Próbowałem również ponownie uruchomić skrypt populacji tablicy, jeśli DB jest zajęty, ale bez skutku.
Przepraszam, jeśli to pytanie jest mylące, z przyjemnością wyjaśniam.
chcę zrobić to samo jak wy, ale dla zapytania w FMDatabaseQueue, wynik musi być powrót asynchroniczny ..... to nie jest bardzo wygodne. Czy masz jakieś propozycje? – flypig
Nie mam tego problemu. Zmieniłem swoją odpowiedź, aby dodać fragment kodu, proszę załączyć, jeśli to nie pomoże. – dvkch
kod blokowy jest wykonywany przez kolejkę fmdb asynchronicznie, a r będzie aktualizowany w bloku, gdy zostanie wykonany kod bloku, ale po prostu zwrócisz r w ostatnim wierszu procedury ... myślę, że dostaniesz pusty wynik zapytania czasami, w zależności od statusu kolejki fmdb. To mnie zdezorientowało przez kilka dni ... może powinniśmy przejść blok ukończenia, aby zwrócić wynik zapytania, np. "(BOOL) updateTaskState: (NSNumber *) taskID withNewStatus: (NSNumber *) state state: (void (^) (BOOL r)) complete;" i wywołaj zakończenie (r) w [queue inDatabase:^(FMDatabase * db) blok {..}]. – flypig