Можно ли сделать копию объекта Realm?

Я хочу обновить базу данных Realm в фоновом потоке следующим образом: (Потому что у меня есть свежие данные из Webservice)

RLMRealm *realm = [RLMRealm defaultRealm]; [realm beginWriteTransaction]; [realm deleteAllObjects]; // !! [Pubs createOrUpdateInRealm:[RLMRealm defaultRealm] withJSONArray:data]; [realm commitWriteTransaction]; 

Проблема в том, что, тем временем я удаляю и обновляю объекты в Realm db, пользователь может открыть некоторый Detail ViewController, указывающий на некоторый объект Realm (Pubs), который был удален тем временем, поэтому выбрано исключение.

Я не вижу никакого решения для этого, но всегда, когда я хотел бы получить доступ к объекту Realm из контроллера Detail или его свойства, мне нужно было бы всегда делать что-то вроде этого:

(Это означает, что вы всегда получаете объект Realm, но, возможно, тоже не сработает)

 pub = [Pubs objectsWhere:[NSString stringWithFormat: @"pubId = %lu", (long)_selectedPubId]].firstObject; 

Но я не использую это решение. Я думаю, что лучше всего было бы, если бы я мог вызвать в контроллере Detail view что-то вроде этого:

 pub = [Pubs objectsWhere:[NSString stringWithFormat: @"pubId = %lu", (long)_selectedPubId]].firstObject; pub = [pub safeCopy]; 

Таким образом, PubRealmObject может быть удален, но объект pub будет соло существовать в памяти (только для целей доступа к его свойствам данных).

Так кто-то пытался что-то подобное?

Или может быть даже использовать какой-то способ SDK для iOS?

Мне нужно только получить доступ к свойствам данных, как я говорю, не работать с объектами объекта realm, такими как удаление или обновление объекта в db.

Btw Я попытался вызвать обновление Realm db в основном потоке, но проблема в том, что он занимает 5-7 секунд (всего 1000 объектов json), поэтому он отстает от приложения. Вот почему я думаю, что обновление фона и безопасное копирование объекта могут быть лучше.

Но я думаю, что он может потерпеть неудачу даже при копировании объекта, так что же это за решение? (обновление фона и безопасный доступ к объекту Realm)

Solutions Collecting From Web of "Можно ли сделать копию объекта Realm?"

Обычно не является хорошим шаблоном проектирования, чтобы иметь контроллер представления, полагающийся на модель данных, которую можно удалить из-под нее. Можно проверить, был ли объект Realm удален, чтобы избежать исключений, проверяя его свойство object.invalidated .

В любом случае, чтобы создать отдельную копию объекта Realm, все, что вам нужно сделать, это:

 RLMObject *copiedObject = [[RLMObject alloc] initWithValue:object]; 

Это сделает копию объекта, но оно не будет вставлено в экземпляр Realm. Обратите внимание: если объект связывается с любыми другими объектами Realm, они также не будут скопированы; новый объект будет просто указывать на существующие копии.

Но я по-прежнему чувствую, что мне нужно упомянуть, что вы, вероятно, могли бы просто сделать вашу реализацию обновления Realm из вашего веб-сервиса немного умнее, чтобы избежать необходимости делать это.

Если ваши объекты реализуют первичный ключ , то при вызове createOrUpdateInRealm существующие объекты будут обновляться с новыми значениями.

Удачи!