2017-05-28 10 views
1

(本当に)これについての助けに感謝しますか?
私は詳細ビューにナビゲートする領域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; 
+0

で既に開いている;' 'componentWillMount(小道具)にするとき、{' – EpicPandaForce

+1

が問題のように思える:反応-ナビゲーションを使用してオブジェクトをナビゲーションに渡してからこのオブジェクトを削除しながらレルムを作成します。 contactIDを渡してcontactIDを使用して削除を行うと、それはうまくいきます:let currContact = Realm.objects( 'Contact')。filtered( 'recordID = "' + params.contactID + '"'); Realm.delete(currContact); – EyalS

+0

私の推測を試しましたか? – EpicPandaForce

答えて

2

それは王国のバグだように/反応-ナビゲーションです。レルムオブジェクトであるパラメータを渡すときにこのオブジェクトを削除すると、次のナビゲーションは失敗します。 バグはあなたが `this.updateContactsFromDB = this.updateContactsFromDB.bind(これ)を移動する場合がありますhttps://github.com/realm/realm-js/issues/1031

関連する問題