如何将新属性添加到R​​ealm对象?

时间:2017-10-07 08:52:38

标签: ios swift swift3 realm

我正在尝试向Realm对象UserDetails添加一个新属性。这是我的尝试:

class CustomerDetails: Object {
   dynamic var customer_id = 0
   dynamic var customer_name = ""
}

现在我需要添加一个新属性" company_name"到之前已经创建的UserDetails对象。如何向现有的Realm对象添加新的?

2 个答案:

答案 0 :(得分:6)

两种方法:

  1. 只需从模拟器中删除您的应用并再次运行即可。每次更改Realm对象的属性时,现有数据库都会与新数据库不兼容。 只要您还处于开发阶段,您只需从模拟器/设备中删除该应用程序并再次启动即可。

  2. 在AppDelegate的disFinishLaunchWithOptions方法中编写此代码:

    import sys from PyQt5.QtWidgets import QApplication from PyQt5.QtWebEngineWidgets import QWebEngineView from PyQt5.QtCore import QDir, QUrl import plotly import plotly.graph_objs as go sys.argv.append("--disable-web-security") app = QApplication(sys.argv) x1 = [10, 3, 4, 5, 20, 4, 3] trace1 = go.Box(x = x1) layout = go.Layout(showlegend = True) data = [trace1] fig = go.Figure(data=data, layout = layout) path = QDir.current().filePath('plotly-latest.min.js') local = QUrl.fromLocalFile(path).toString() raw_html = '<html><head><meta charset="utf-8" />' raw_html += '<script src="{}"></script></head>'.format(local) raw_html += '<body>' raw_html += plotly.offline.plot(fig, include_plotlyjs=False, output_type='div') raw_html += '</body></html>' view = QWebEngineView() view.setHtml(raw_html) view.show() sys.exit(app.exec_())

  3. 我建议你按照第二个。

答案 1 :(得分:4)

您只需将属性添加到R​​ealm模型,但必须提供migration才能将存储的数据更新为新格式。

这包括在schemaVersion中设置Realm.Configuration,告诉Realm架构已更改,并提供migrationBlock初始化现有对象的新属性(可能只需设置一个空字符串)。在下一次启动应用程序时,Realm将自动运行迁移,从而将存储的数据更新为新架构。