2017-01-11 7 views
0

В нашем приложении мы используем статическую область, которую мы можем загрузить и обновить во время выполнения. Чтобы определить правильную версию схемы Realm, мы используем хеш md5 описания схемы области. Поэтому, если наша схема изменится, нам просто нужно предоставить новую версию базы данных, и приложение сможет ее найти. Благодаря этому мы можем одновременно иметь несколько версий, каждый из которых может загружать или обновлять свою соответствующую базу данных.Описание схемы каналов не идентично на симуляторе и устройстве

Это долго работало, пока мы не обнаружили, что описание схемы царства на симуляторе и устройстве в некоторых редких случаях не одинаково. У нас около 35 сущностей, и странно, что только одно описание отличается в порядке полей.

SomeEntity { 
    telefon { 
     type = bool; 
     objectClassName = (null); 
     linkOriginPropertyName = (null); 
     indexed = NO; 
     isPrimary = NO; 
     optional = YES; 
    } 
    email { 
     type = bool; 
     objectClassName = (null); 
     linkOriginPropertyName = (null); 
     indexed = NO; 
     isPrimary = NO; 
     optional = YES; 
    } 
} 

Что отличает? «telefon» и «email» переключаются в порядке на реальном устройстве - что, конечно же, приводит к другому хэш-адресу md5.

Не должно ли быть идентичным описание на всех устройствах?

Что было бы отличным и надежным способом определения схемы царства?

Редактировать
Мы используем ту же версию области на обоих устройствах.

ответ

0

Все файлы Realm отслеживают версию их схемы с помощью значения, которое называется schemaVersion. Вы можете явно управлять версией схемы, на которой находится Realm, путем увеличения значения в объекте Configuration. Приращение это вызовет миграцию:

let config = Realm.Configuration( 
    schemaVersion: 1, 
    migrationBlock: { migration, oldSchemaVersion in } 
) 

Вы также можете проверить текущее schemaVersion файла Realm, не открывая его, вызвав функцию schemaVersionAtURL(_:encryptionKey:). Это может позволить вам выбрать, что делать с файлом Realm на основе его версии схемы, прежде чем открывать его.

description схемы Realm существует для целей отладки и никогда не предполагалось использовать в качестве части бизнес-логики приложения.

Смежные вопросы