Intereting Posts
Предел размера в UIImageView? Текстовые атрибуты, которые не отображаются в богатом UITextView (iOS 6) Есть видео: после Peek и Pop (3D Touch) фон держит прокрутку IOS Как изменить размер изображения в соответствии с фактическим соотношением изображений и предоставить нестандартный размер? являются параметрами блока iOS, которые каким-то образом позволяли быть конкретными подклассами определенного типа Делегат работает неправильно Как установить фоновое изображение внутри календаря по умолчанию и пользовательский календарь Индивидуальный размер стола iPhone, как проверить, может ли телефон отправлять / получать почту с помощью собственного почтового приложения? Можете ли вы использовать графические карты Google в своем оплачиваемом приложении IOS? Сохранение файлов cookie для сохранения учетных данных для приложения iPhone iOS на мобильном устройстве не отображает границы CSS 1px правильно Доступ к удаленным объектам в уведомлении iCloud IBOutlet – ноль, но он связан в раскадровке (Swift 2) Найти CGRect подстроки

Можно ли сделать копию объекта 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)

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

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

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

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

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

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

Удачи!