Ios 删除领域对象中的属性

Ios 删除领域对象中的属性,ios,objective-c,realm,Ios,Objective C,Realm,我正在尝试删除一个领域对象中的属性,但是我不确定如何为此编写迁移 我刚从对象的头文件中删除了该属性,但由于出现以下错误,该属性无效: 由于未捕获的异常“RLMEException”而终止应用程序,原因: '由于以下原因,对象类型'Stock'需要迁移' 错误: -最新对象模型中缺少属性“percentageOn” 我知道如何编写迁移添加字段,但如何删除它?David所说的是正确的。如果您确保正确执行迁移,则Realm可以轻松处理已删除和添加的属性。除非您仍然需要percentageOn中的值,否

我正在尝试删除一个领域对象中的属性,但是我不确定如何为此编写迁移

我刚从对象的头文件中删除了该属性,但由于出现以下错误,该属性无效:

由于未捕获的异常“RLMEException”而终止应用程序,原因: '由于以下原因,对象类型'Stock'需要迁移' 错误: -最新对象模型中缺少属性“percentageOn”


我知道如何编写迁移添加字段,但如何删除它?

David所说的是正确的。如果您确保正确执行迁移,则Realm可以轻松处理已删除和添加的属性。除非您仍然需要
percentageOn
中的值,否则您甚至可以将迁移块保留为空,如Realm网站上的示例所示:

// Inside your [AppDelegate didFinishLaunchingWithOptions:]

// Notice setSchemaVersion is set to 1, this is always set manually. It must be
// higher than the previous version (oldSchemaVersion) or an RLMException is thrown
[RLMRealm setSchemaVersion:1
            forRealmAtPath:[RLMRealm defaultRealmPath] 
        withMigrationBlock:^(RLMMigration *migration, NSUInteger oldSchemaVersion) {
  // We haven’t migrated anything yet, so oldSchemaVersion == 0
  if (oldSchemaVersion < 1) {
    // Nothing to do!
    // Realm will automatically detect new properties and removed properties
    // And will update the schema on disk automatically
  }
}];

// now that we have called `setSchemaVersion:withMigrationBlock:`, opening an outdated
// Realm will automatically perform the migration and opening the Realm will succeed
[RLMRealm defaultRealm];
//在[AppDelegate didFinishLaunchingWithOptions:]
//请注意,setSchemaVersion设置为1,这始终是手动设置的。一定是
//高于上一版本(oldSchemaVersion)或抛出RLMEException
[RLMRealm setSchemaVersion:1
forRealmAtPath:[RLMRealm defaultRealmPath]
withMigrationBlock:^(RLMMiglation*迁移,NSU整数oldSchemaVersion){
//我们还没有迁移任何内容,所以oldSchemaVersion==0
if(oldschemaversation<1){
//无事可做!
//领域将自动检测新属性和删除的属性
//并将自动更新磁盘上的架构
}
}];
//现在我们已经调用了“setSchemaVersion:withMigrationBlock:”,打开了一个过时的
//领域将自动执行迁移,并成功打开领域
[RLMRealm defaultRealm];

当然,如果没有后果,你不能直接做这件事。解决方案1:像U一样删除属性,并从模拟器中删除应用程序。这就解决了数据库不一致的问题。解决方案2:您的应用正在生产中,用户已经在使用它。因此,您需要执行迁移以避免影响您的客户。请阅读文档,在这种情况下该怎么办:好的,那么在迁移块域中检查所有删除的属性并将它们从数据库中删除?正确!也就是说,这些属性中的数据也将被删除,因此如果需要保留该数据,请确保将其移动到迁移块中的新属性。