Solidity函数无法返回uint256[]数组问题求助
问题排查与解决
你的函数返回空数组,大概率不是读取函数本身的问题,而是映射里根本没给目标地址存储数据,或者调用细节没做好,按下面的步骤排查:
检查写入逻辑:你有没有其他函数(比如mint、transfer)往
ownerToIds[owner]里添加元素?比如mint时应该执行ownerToIds[msg.sender].push(newTokenId);,transfer时要把tokenId从旧所有者的数组里移除,再添加到新所有者的数组。如果这些逻辑缺失或写错,映射里自然没数据,返回空数组是正常的。修正函数修饰符:你的函数目前没加
view,虽然public函数也能读取状态,但view是读取状态不修改合约时的标准修饰符,更新后的代码:mapping(address => uint256[]) ownerToIds; function getOwnersOwnedTokenIds(address owner) public view returns(uint256[] memory){ return ownerToIds[owner]; }确认调用地址正确:在Remix调用函数时,输入的
owner地址必须是确实关联了tokenId的地址,别输错(比如把测试网地址写成主网地址,或者误输成合约地址而非用户地址)。直接验证状态变量:在Remix的「Deployed Contracts」面板里,找到
ownerToIds映射,输入目标地址直接查看。如果这里也为空,那肯定是写入逻辑的问题,回去检查修改ownerToIds的函数;如果这里有数据但函数返回空,刷新Remix或重新部署合约试试,大概率是环境缓存问题。
内容的提问来源于stack exchange,提问作者saeedhsb
相关产品推荐
相关产品推荐

