Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.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
React native 无法修改写事务之外的托管对象-React Native,Realm_React Native_Realm_Realm Mobile Platform - Fatal编程技术网

React native 无法修改写事务之外的托管对象-React Native,Realm

React native 无法修改写事务之外的托管对象-React Native,Realm,react-native,realm,realm-mobile-platform,React Native,Realm,Realm Mobile Platform,我试图在单击按钮时更新域中的对象,但是我得到了错误 “可能的未处理承诺拒绝(id:0): 错误:无法在写入事务之外修改托管对象。“ 这段代码几天前还在运行,但现在抛出了上述错误 我仍在学习React Native和Realm,但根据我的理解以及下面的示例和Realm文档,我正在使用正确的代码,因此它应该可以工作 编辑 onPressFavourites(item) { //console.log(realm); let realm = Realm.open({ p

我试图在单击按钮时更新域中的对象,但是我得到了错误

“可能的未处理承诺拒绝(id:0): 错误:无法在写入事务之外修改托管对象。“

这段代码几天前还在运行,但现在抛出了上述错误

我仍在学习React Native和Realm,但根据我的理解以及下面的示例和Realm文档,我正在使用正确的代码,因此它应该可以工作

编辑

onPressFavourites(item) {
    //console.log(realm);
    let realm = Realm.open({
        path: RNFS.DocumentDirectoryPath +'/trees.realm',
        schema: [sightingSchema, treeSchema],
        schemaVersion: 7,
    }).then(realm => {
        let trees = realm.objects('TreeInfo');
        for(var i=0; i<trees.length;i++){
            if(trees[i].commonName == item.commonName){
                var chosen = trees[i];
                break;
            }  
        }
        console.log(chosen);
        if(item.favourites === 0) {
                realm.write(() => {
                    //item.favourites = 1;
                    //item.favouritesColour = '#91b54d';
                    chosen.favourites = 1;
                    chosen.favouritesColour = '#91b54d';
                });
        }
        else {
            realm.write(() => {
                chosen.favourites = 0;
                chosen.favouritesColour = 'transparent';
            }); 
        }
    });
    alert(item.favourites)// Update a property value
}
似乎领域和写事务都很好。 我们能够找到一个迂回的方法来修复它,但是现在更新不会显示,直到应用程序刷新

似乎错误
可能未处理的承诺拒绝(id:0):
错误:无法在写入事务之外修改托管对象。
是在使用参数
定义所选领域对象时生成的。但是,如果我们创建一个与
项相关的变量,它不会产生该错误。你知道为什么会这样吗

onPressFavourites(item) {
    let realm = Realm.open({
    path: RNFS.DocumentDirectoryPath +'/trees.realm',
    schema: [sightingSchema, treeSchema],
    schemaVersion: 7,
   }).then(realm => {
    if(item.favourites === 0) {
     realm.write(() => {
        item.favourites = 1;
        item.favouritesColour = '#91b54d';
    });

    } else {
        realm.write(() => {
      item.favourites = 0;
        item.favouritesColour = 'transparent';
          }); 
    }
        }); 
    alert(item.favourites)// Update a property value
    }

这个树里面关联了领域里的一些东西,所以不能改变,要重新复制一个数组,像这样

让trees=realm.objects('TreeInfo')

var arr=[];
对于(设i=0;trees&&i
用英语回答:

有一些关于
领域
的内容,因此您无法更改它。只需复制一个新阵列,如下所示:

let trees=realm.objects('TreeInfo')

var arr=[];
对于(设i=0;trees&&i
除了
Realm.open()
不返回领域(请参阅),我看不到任何明显的错误。有什么建议我可以做什么来修复它吗?这两个
write
s看起来不错,但是
item
sightingSchema
treeSchema
?项目
treeSchema
中,但是我相信如果它们是嵌套对象,你必须打开这两个模式吗?
sightingSchema
treeSchema
中的一个对象。如果您在其他领域中有更多的模式,使用这两个模式打开可能会触发迁移。也许将
领域
作为参数传递给
onpressFavorites
更容易些。同样的英语答案呢?:)
render() { 
    var treeList = this.state.trees;
    console.log(treeList);
    const {navigate} = this.props.navigation;
     //var  tree = treeList[0];
    return(
        <Container>
            <Header searchBar style={styles.searchBar}>
              <Item style={styles.searchBarInner}>
                <Icon name="ios-search" />
                <Input placeholder="Search" />
              </Item>
            </Header>
            <List dataArray={treeList}
                renderRow={(item) => 
                    <ListItem style={styles.ListItem} button={true}>
                        <ListButton item={item}
                            onSelect={(item) => this.saveTreeInfo(item)}
                            onSelectFavourites={(item) =>                               this.onPressFavourites(item)
                            }
                        /> 
                    </ListItem>
                }
            >
            </List>
        </Container>
    );
}
filterContent(){
        Realm.open({
            path: RNFS.DocumentDirectoryPath +'/trees.realm',
            schema: [sightingSchema, treeSchema],
            schemaVersion: 7,
            }).then(realm => {
                let trees = realm.objects('TreeInfo');
                let length = trees.length;
                let treeRealm = trees.sorted('commonName');

                console.log(this.state.leafEdges);
                if (this.state.leafEdges === 'smooth') {
                    var smoothLeaf = treeRealm.filtered('leafEdges CONTAINS "Smooth"');
                    this.setState({trees:smoothLeaf});
                }
                if (this.state.leafEdges === 'toothed') {
                    var toothedLeaf = treeRealm.filtered('leafEdges CONTAINS "Toothed"');
                    this.setState({trees:toothedLeaf});
                }
                if (this.state.leafEdges === 'notsure') {
                    this.setState({trees:treeRealm});
                }
                else if (this.state.leafEdges === 'null') {
                    this.setState({trees:treeRealm});   
                }
            });
    }
var arr=[];
for (let i = 0;trees && i < trees .length; i++) {
  var item=trees[i];
  var item2={
    id: item.id,
     ....
  }
arr.push(item2);
}
var arr=[];
for (let i = 0;trees && i < trees .length; i++) {
  var item=trees[i];
  var item2={
    id: item.id,
     ....
  }
arr.push(item2);
}