2015-07-11 136 views
0

舊的RLMObject在下面,primaryKey是AttributeId。我想將此鍵更改爲@「Id」next build。領域主鍵遷移 - 目標C

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' 

我該如何解決這個問題?非常感謝。

+0

您是否嘗試過給它不是'Id'其他不同的名稱?只是爲了試用 - 例如'userID'。也許有一些內部問題的名稱'Id' ... – Michal

+0

我嘗試過,但無法解決:/ – serdaryillar

回答

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"]; 
      }]; 
     } 
    }];