Mam obiekt Realm (nazwijmy go File) z wywołaną właściwością String url
. Stworzyłem Alamofire DownloadRequest.DownloadFileDestination
blok zawierający odniesienie do url
więc mogę pobrać plik. Ponieważ jednak blok ten jest wykonywany na wątku w tle, Realm zgłasza wyjątek. Nie muszę faktycznie uzyskiwać dostępu do całej dziedziny, ani nawet całego obiektu File - tylko właściwości url
- więc nie ma powodu, aby próbować otworzyć obiekt File z dziedziny w wątku w tle.
Jaki jest właściwy sposób kopiowania tego ciągu (lub właściwości innych typów) z obiektu Realm, aby przejść do innego wątku?
Moje obecne rozwiązanie wydaje się bardzo nieeleganckie - choć działa.
let url = "(object.url)"
To pytanie nie jest związane z konkretnym blokiem kodu - jest to raczej pytanie koncepcyjne.
Odpowiedzi:
0 dla odpowiedzi № 1To normalne, jeśli czytasz Dokumenty dziedziny dla wątków, powiedziało you cannot have multiple threads sharing the same instances of Realm objects
, to znaczy, że przynosisz File
obiekt w głównym wątku, którego nie można używać w innym wątku, w twoim przypadku jest wątek tła Alamofire
To co zrobiłeś jest poprawne, przypisując wartość url do innej zmiennej, w przeciwnym razie po prostu zadzwoń fetchFile().url
gdzie fetchFiles()
zwróć obiekt pliku z Realm (ponownie pobierz obiekt pliku - ale będzie to miało gorszą wydajność, użyteczną tylko w innym przypadku, gdy obiekt dziedziny zmienił się znacznie)
0 dla odpowiedzi nr 2
Proste przypisywanie let url = object.url
skopiuje wartość i jest bezpieczny dla wątków.