2017-01-09 2 views
0

2つのオブジェクト(SFCHChatSFCHMessages)と1対多の関係を持つモデルがあります。RLMArrayからRLMLinkingObjectsへの移行

ため、私は今、生産に次の例外を取得レルム0.98から2.0へのアップグレードに:だから

Migration is required due to the following errors: - Property 'SFCHChat.chatId' has been made optional. - Property 'SFCHChat.lastReadedMessageId' has been made optional. - Property 'SFCHMessage.chat' has been added. - Property 'SFCHMessage.messageId' has been made optional. - Property 'SFCHMessage.chatId' has been made optional. - Property 'SFCHMessage.userId' has been made optional. - Property 'SFCHMessage.message' has been made optional. - Property 'SFCHUser.initials' has been made optional. - Property 'SFCHUser.userId' has been made optional. - Property 'SFCHChat.messages' has been removed. 

を、私は+ (NSArray *)requiredPropertiesにoptionalsを追加しましたが、それはおよそSFCHChat.messagesSFCHMessage.chatを行くためにどのように明確ではありません。ここでは、これらのオブジェクトのコードdiffは次のとおりです。

### SFCHMessage.h 
[email protected] (readonly) SFCHChat *chat; 
[email protected] SFCHChat *chat; 

### SFCHMessage.m 
-- (SFCHChat *)chat 
-{ 
- return [[self linkingObjectsOfClass:@"SFCHChat" forProperty:@"messages"] firstObject]; 
-} 
- 

### SFCHChat.h 

[email protected] RLMArray<SFCHMessage> *messages; 
[email protected] (readonly) RLMLinkingObjects *messages; 

### SFCHChat.m 

++ (NSDictionary *)linkingObjectsProperties { 
+ return @{ 
+    @"messages": [RLMPropertyDescriptor descriptorWithClass:SFCHMessage.class propertyName:@"chat"], 
+    }; 
+} 
+ 

要約するlinkingObjectsOfClassは非推奨になったとして、私は、RLMLinkingObjectsプロパティにレルムオブジェクトの配列を移行しました。そこでオブジェクトをSFCHChat.messages RLMArrayに追加するのではなく、SFCHMessagechatプロパティを追加し、RLMLinkingObjectsでリンクバックしました。

(readonly)に変更すると、レルムのプロパティを削除するように見えますが、削除するとプロパティを追加するように見えます。私のケースでは実際に移行ブロックが必要ですか?この移行はどのように実行しますか?

答えて

1

はい、私は、あなたのレルムのスキーマをバンプして移行を実行することが適切であると言います。

レルムがオプションの値を明示的に指定するだけですべてのプロパティにオプションの値を追加したときに緩和することはできますが、プロパティの追加または削除には単純にマイグレーションが必要です。

保存することを選択しない限り、移行で失われるプロパティにデータがないかぎり、空のブロックを追加するだけで簡単にレルムの移行を実行できます。

RLMRealmConfiguration *configuration = [RLMRealmConfiguration defaultConfiguration]; 
configuration.schemaVersion = 1; //Must be incremented by 1 each time the schema is changed. 
configuration.migrationBlock = ^(RLMMigration *migration, uint64_t oldSchemaVersion) { }; 
[RLMRealmConfiguration setDefaultConfiguration:configuration]; 

これは、あなたが[RLMRealm defaultRealm]を呼び出す次回は、移行が実行されると、あなたのファイルがアップグレードされるということを行います。

関連する問題