gpt4 book ai didi

react-native - realm.js - 访问类型为 Contact 的对象,该对象已失效或删除且无堆栈跟踪

转载 作者:行者123 更新时间:2023-12-04 04:45:38 26 4
gpt4 key购买 nike

会(真的)感谢对此的帮助。
我有一个 Realm listView 导航到详细 View 。
详细 View 正在从原始 ListView 中删除条目并返回。我已经在 Realm 数据库更改上注册了监听器以更新 ListView 的内容。
这是我正在使用的代码,删除后会出现异常 - “访问已失效或删除的 Contact 类型的对象”,在导航发生后。
有谁知道为什么?
此外,似乎更改监听器 (updateContactsFromDB) 被调用两次,同时只删除一个对象 - 想法?

10倍

ContactPage.js:

export default class ContactsPage extends Component {
updateContactsFromDB(){
console.log("ContactsPage:updateContactsFromDB()");
let contacts = Realm.objects('Contact');
this.setState({
dataSource: this.state.dataSource.cloneWithRows(contacts.snapshot()),
});
}
constructor(props) {
console.log("ContactsPage:constructor()");
super(props);
const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => (r1 !== r2)});
let contacts = Realm.objects('Contact');
this.state = {
dataSource: ds.cloneWithRows(contacts.snapshot()),
};
this.updateContactsFromDB = this.updateContactsFromDB.bind(this);
}
componentWillMount(props){
console.log("ContactsPage:componentWillMount");
Realm.addListener('change', this.updateContactsFromDB);
}
componentWillUnmount(props){
console.log("ContactsPage:componentWillUnmount");
Realm.removeListener('change', this.updateContactsFromDB);
}
render() {
console.log("ContactsPage:render()");
return (
<ListView
dataSource={this.state.dataSource}
renderRow={(contact) => (
<TouchableOpacity onPress={ () => this.props.navigation.navigate('ContactNotesPage', { contact: contact}) }>
<Text>test Contact</Text>
</TouchableOpacity>
)
}
/>
);
}
}

ContactNotesPage.js:

export default class ContactNotesPage extends Component {
constructor(props) {
console.log("ContactNotesPage:constructor");
super(props);
}
render(){
console.log("ContactNotesPage:render()");
const { params } = this.props.navigation.state;
return (
<TouchableOpacity onPress={ () => {
console.log("ContactNotesPage:delete");
Realm.write(() => { Realm.delete(params.contact);});
this.props.navigation.navigate('ContactsPage');
}
}>
<Text>DeleteContact</Text>
</TouchableOpacity>
)
}
};

// main.js
const MainStack = StackNavigator({
ContactsPage: {
screen: ContactsPage,
},
ContactNotesPage:{
screen: ContactNotesPage,
},
});

export default MainStack;

最佳答案

似乎这是 Realm/ react 导航中的错误。当传递一个 Realm 对象的参数时 - 如果您删除此对象,您的下一次导航将失败。
一个错误已经在 https://github.com/realm/realm-js/issues/1031 打开

关于react-native - realm.js - 访问类型为 Contact 的对象,该对象已失效或删除且无堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44226007/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com