【问题标题】:Realm primary key migration - objective C领域主键迁移-目标C
【发布时间】:2015-07-11 09:55:53
【问题描述】:

旧的 RLMObject 在下面,primaryKey 是 AttributeId。我想将此键更改为 @"Id" next build。

UserItemObject.m

@implementation UserItemObject {

}

+ ( NSString * )primaryKey; {
    return @"AttributeId";
}

@end

UserItemObject.h

@interface UserItemObject : RLMObject
   @property(nonatomic, copy) NSString *Id;
   @property(nonatomic, copy) NSString *AttributeId;
@end
RLM_ARRAY_TYPE(UserItemObject)

然后我给 AppDelegate 写了一些代码;

  [RLMRealm setSchemaVersion:1 forRealmAtPath:[RLMRealm defaultRealmPath] withMigrationBlock:^(RLMMigration *migration, NSUInteger oldSchemaVersion) {
      if ( oldSchemaVersion < 1 ) {
          [migration enumerateObjects: UserItemObject.className block:^(RLMObject *oldObject, RLMObject *newObject) {
                newObject[ @"primaryKeyProperty" ] = @"Id";
          }];
      }
  }];

这段代码给我一个错误;

*** Terminating app due to uncaught exception 'RLMException', reason: 'Invalid property name'

我该如何解决这个问题?非常感谢。

【问题讨论】:

  • 你有没有试过给它一个不同于Id的名字?只是为了试用 - 例如userID。也许Id这个名字有一些内部问题...
  • 我之前试过但不能解决:/

标签: ios objective-c realm core-data-migration realm-migration


【解决方案1】:

要更改主键属性,您需要更改+[UserItemObject primaryKey] 的返回值。

然后,要实际进行迁移,您将执行以下操作:

[RLMRealm setSchemaVersion:1 forRealmAtPath:[RLMRealm defaultRealmPath] withMigrationBlock:^(RLMMigration *migration, NSUInteger oldSchemaVersion) {
      if ( oldSchemaVersion < 1 ) {
          [migration enumerateObjects: UserItemObject.className block:^(RLMObject *oldObject, RLMObject *newObject) {
                newObject[ @"Id" ] = oldObject[@"AttributeId"];
          }];
      }
  }];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    相关资源
    最近更新 更多