Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 创建新领域对象后导航出错_Android_React Native_Navigation_Realm_React Native Navigation - Fatal编程技术网

Android 创建新领域对象后导航出错

Android 创建新领域对象后导航出错,android,react-native,navigation,realm,react-native-navigation,Android,React Native,Navigation,Realm,React Native Navigation,在我的项目中,我正在使用react本地导航包和领域。我的应用程序有一个名为Notebook的领域对象,其中包含Verse对象的列表,这些对象是另一个领域对象 应用程序的结构非常简单,第一页显示的是笔记本s的列表,当选择其中一个时,应用程序将切换到第二个屏幕,这是韵文s的列表 以下是我从笔记本列表导航到诗歌列表的代码: this.props.navigator.push({ screen: 'com.beyersapps.biblebinderrn.verselist', title: n

在我的项目中,我正在使用react本地导航包和领域。我的应用程序有一个名为
Notebook
的领域对象,其中包含
Verse
对象的列表,这些对象是另一个领域对象

应用程序的结构非常简单,第一页显示的是
笔记本
s的列表,当选择其中一个时,应用程序将切换到第二个屏幕,这是
韵文
s的列表

以下是我从笔记本列表导航到诗歌列表的代码:

this.props.navigator.push({
  screen: 'com.beyersapps.biblebinderrn.verselist',
  title: notebook.name,
  passProps: {notebook: notebook},
  animated: true,
  animationType: 'fade',
  backButtonTitle: undefined,
  backButtonHidden: false
})
这个导航很好,我可以在两个屏幕之间来回移动。当我创建一个新的
韵文
并将其添加到
笔记本
中时,我的问题就出现了。这是我在第二个屏幕中的代码,用于创建新的
诗句

realm.write(() => {
  let newVerse = realm.create('Verse', {
    reference: 'Genesis 1:1',
    favorite: false,
    memorized: false,
    scripture: 'My favorite verse'
  });

  if (this.notebook != null) {
    this.notebook.verses.push(newVerse);
  }
});
这就是我的问题开始的地方。此时,如果我选择“上一步”按钮返回到
Notebook
s列表,然后再次选择一个笔记本,我会得到以下错误:

正在尝试更改只读属性的值

本机调用中的异常 java.lang.RuntimeException:调用rcteventMitter.ReceiveTouchs时出错

在com.facebook.react.bridge.queue.NativeRunnable.run(本机方法)
位于android.os.Handler.handleCallback(Handler.java:751)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31)
在android.os.Looper.loop(Looper.java:154)
在com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:199)
在java.lang.Thread.run(Thread.java:761)
原因:com.facebook.jni.CppException:异常调用对象作为函数:TypeError:尝试更改只读属性的值。
在com.facebook.react.bridge.queue.NativeRunnable.run(本机方法)
位于android.os.Handler.handleCallback(Handler.java:751)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31)
在android.os.Looper.loop(Looper.java:154)
在com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:199)
运行(Thread.java:761)

我可以做几件事来解决这个问题,但这两件事都使我的应用程序毫无用处。因为它们可能有助于确定问题,尽管我可以在导航到新屏幕时从
passProps
中删除
{notebook:notebook}
(但是
Verse
列表屏幕上没有显示任何内容,因为它不知道选择了哪个
notebook
)。或者,我无法将新创建的
韵文
添加到所选的
笔记本
(但之后我无法添加数据)

由于这两个更改位于两个不同的组件(领域和react native navigation)中,我不确定哪个组件是问题的根源。

作为道具传递的对象(
passProps
)被react native冻结。 尝试更改:

passProps: {notebook: notebook}
致:

如果您需要在上一屏幕中反映对
笔记本的更改,我认为您应该通过应用商店进行反映


另一个选项是传递
notebookId
,并从state获取正确的笔记本id。

我没有使用
\uuuu.cloneDeep
,而是传递笔记本的主键并搜索该id。现在一切都很好。谢谢
passProps: {notebook: _.cloneDeep(notebook)}