/ / Dziedzina, dostęp do obiektu z innego wątku - cel-c, dziedzina

Królestwo, dostęp do obiektu z innego wątku - cel-c, dziedzina

Zapisałem obiekty w tablicy w jednym wątku. Czasami potrzebuję dostępu do niego z innego wątku. Jak mogę to osiągnąć?

// Main thread
DownloadVideoObject *obj = [DownloadVideoObject createWithKey:@"13"];
obj.videoURLStr = @"..";
[[RLMRealm defaultRealm] addObject:obj];
[self.downloadObjects addObject:obj];

// in another thread
for (DownloadVideoObject *obj in self.downloadObjects) {
if ([key isEqualToString:obj.key]) { // crash on this line "Realm accessed from incorrect thread"
// ...
}
}

W CoreData Mogę znaleźć obiekt w innym wątku przez objectId. Jak mogę zrobić coś takiego w Realm?

Edytować

Wiem, że mogę uzyskać dostęp do obiektu za pomocą klucza podstawowego, ale w innym wątku nie mam do niego dostępu. Czy zapisywanie kluczy zamiast obiektu jest tylko właściwym rozwiązaniem?

Odpowiedzi:

0 dla odpowiedzi № 1

To, co powiedziałeś, jest poprawne.Ponieważ obiekty Realm są ograniczone wątkami, najłatwiejszym sposobem interakcji z tym samym obiektem Realm w innym wątku jest po prostu ponowne pobranie go w nowym wątku przy użyciu klucza podstawowego.

W odpowiedzi na twoją edycję, tak, umieszczając plikklucze podstawowe wszystkich obiektów Realm w nowej tablicy i po prostu przekazanie ich do nowego wątku, aby umożliwić ponowne pobranie tych samych obiektów, byłoby najszybszym i najłatwiejszym sposobem wykonania tego rodzaju operacji.

Na marginesie, podczas gdy jest to możliwe w danych podstawowychaby uzyskać dostęp do zarządzanych obiektów z innego wątku (podczas gdy Realm wyraźnie tego zabrania), nie jest to zalecane, ponieważ te obiekty nadal nie są bezpieczne dla wątków, a zrobienie tego może potencjalnie prowadzić do niestabilności.