React native 无法修改写事务之外的托管对象-React Native,Realm
我试图在单击按钮时更新域中的对象,但是我得到了错误 “可能的未处理承诺拒绝(id:0): 错误:无法在写入事务之外修改托管对象。“ 这段代码几天前还在运行,但现在抛出了上述错误 我仍在学习React Native和Realm,但根据我的理解以及下面的示例和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
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);
}