(本当に)これについての助けに感謝しますか?
私は詳細ビューにナビゲートする領域listViewを持っています。
詳細ビューでは、元のリストビューからエントリを削除し、元に戻すことができます。私は、リストビューの内容を更新するために、領域DBのリスナーを登録しました。
私が使用しているコードは、削除後に例外が発生します。ナビゲーションが発生した後、「無効または削除されたタイプの連絡先のオブジェクトにアクセスしています。
理由は誰にも分かりますか?
また、変更リスナー(updateContactsFromDB)は2つ呼び出されているようですが、1つのオブジェクト(アイデア)を削除していますか?realm.js - スタックトレースなしで無効化または削除されたContactタイプのオブジェクトへのアクセス
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;
で既に開いている;' 'componentWillMount(小道具)にするとき、{' – EpicPandaForce
が問題のように思える:反応-ナビゲーションを使用してオブジェクトをナビゲーションに渡してからこのオブジェクトを削除しながらレルムを作成します。 contactIDを渡してcontactIDを使用して削除を行うと、それはうまくいきます:let currContact = Realm.objects( 'Contact')。filtered( 'recordID = "' + params.contactID + '"'); Realm.delete(currContact); – EyalS
私の推測を試しましたか? – EpicPandaForce