RLMMigration

@interface RLMMigration : NSObject

RLMMigration instances encapsulate information intended to facilitate a schema migration.

A RLMMigration instance is passed into a user-defined RLMMigrationBlock block when updating the version of a Realm. This instance provides access to the old and new database schemas, the objects in the Realm, and provides functionality for modifying the Realm during the migration.

Properties

  • Returns the old RLMSchema. This is the schema which describes the Realm before the migration is applied.

    Declaration

    Objective-C

    @property (nonatomic, readonly) RLMSchema *_Nonnull oldSchema;

    Swift

    var oldSchema: RLMSchema { get }
  • Returns the new RLMSchema. This is the schema which describes the Realm after the migration is applied.

    Declaration

    Objective-C

    @property (nonatomic, readonly) RLMSchema *_Nonnull newSchema;

    Swift

    var newSchema: RLMSchema { get }

Altering Objects during a Migration

  • Enumerates all the objects of a given type in the Realm, providing both the old and new versions of each object. Within the block, object properties can only be accessed using keyed subscripting.

    Warning

    All objects returned are of a type specific to the current migration and should not be cast to className. Instead, treat them as RLMObjects and use keyed subscripting to access properties.

    Declaration

    Objective-C

    - (void)enumerateObjects:(nonnull NSString *)className
                       block:(nonnull RLMObjectMigrationBlock)block;

    Swift

    func enumerateObjects(_ className: String, block: (RLMObject?, RLMObject?) -> Void)

    Parameters

    className

    The name of the RLMObject class to enumerate.

  • Creates and returns an RLMObject instance of type className in the Realm being migrated.

    The value argument is used to populate the object. It can be a key-value coding compliant object, an array or dictionary returned from the methods in NSJSONSerialization, or an array containing one element for each managed property. An exception will be thrown if any required properties are not present and those properties were not defined with default values.

    When passing in an NSArray as the value argument, all properties must be present, valid and in the same order as the properties defined in the model.

    Declaration

    Objective-C

    - (nonnull RLMObject *)createObject:(nonnull NSString *)className
                              withValue:(nonnull id)value;

    Swift

    func createObject(_ className: String, withValue value: Any) -> RLMObject

    Parameters

    className

    The name of the RLMObject class to create.

    value

    The value used to populate the object.

  • Deletes an object from a Realm during a migration.

    It is permitted to call this method from within the block passed to -[enumerateObjects:block:].

    Declaration

    Objective-C

    - (void)deleteObject:(nonnull RLMObject *)object;

    Swift

    func delete(_ object: RLMObject)

    Parameters

    object

    Object to be deleted from the Realm being migrated.

  • Deletes the data for the class with the given name.

    All objects of the given class will be deleted. If the RLMObject subclass no longer exists in your program, any remaining metadata for the class will be removed from the Realm file.

    Declaration

    Objective-C

    - (BOOL)deleteDataForClassName:(nonnull NSString *)name;

    Swift

    func deleteData(forClassName name: String) -> Bool

    Parameters

    name

    The name of the RLMObject class to delete.

    Return Value

    A Boolean value indicating whether there was any data to delete.

  • Renames a property of the given class from oldName to newName.

    Declaration

    Objective-C

    - (void)renamePropertyForClass:(nonnull NSString *)className
                           oldName:(nonnull NSString *)oldName
                           newName:(nonnull NSString *)newName;

    Swift

    func renameProperty(forClass className: String, oldName: String, newName: String)

    Parameters

    className

    The name of the class whose property should be renamed. This class must be present in both the old and new Realm schemas.

    oldName

    The old name for the property to be renamed. There must not be a property with this name in the class as defined by the new Realm schema.

    newName

    The new name for the property to be renamed. There must not be a property with this name in the class as defined by the old Realm schema.