iOS 下 getDataFromFile 读取到的是null, 文件是存在的

1.7.2 beta2
iOS 9.3.2

let picData = jsb.fileUtils.getDataFromFile(cc.url.raw(picPath));

文件确定是存在的,因为 jsb.fileUtils.isFileExist(cc.url.raw(picPath)) 返回 true

得到的是null

Android native下没有问题。是相同的代码。

请提供复现demo

picPath的文件 是热更新来的。

我能想到的就是跟热更新相关,这个实现上要么是cc.url.raw有问题,要么就是getDataFromFile有问题,估计是相对路径绝对路径,或者搜索路径的问题。

你这样,排查一下。直接用 getDataFromFile 加载一个本地文件,看看会是null么?这样至少可以确定是不是getDataFromFile的问题。

放到本地也不行。

这是构建后的代码:

这是调试日志:

难道没人在iOS下这样用? 没有特殊逻辑,严重怀疑是 getDataFromFile 在iOS上的实现问题

亲,您怀疑的是,能劳驾您帮忙整理一个这样的复现demo发给我们么?谢谢您的反馈。

新鲜demo,请连接苹果真机调试测试 , 不是不想给你写demo,有事耽误,不然这个帖子我早就跟进了,督促你们尽快处理:grin:

NewProject.zip (399.9 KB)

而且代码就这几句,还需要demo。。。。。

let label = this.node.getChildByName('label').getComponent(cc.Label);

let picPath = 'resources/1.png';
let path = cc.url.raw(picPath);
let logPath = 'cc.url.raw: ' + path;
cc.log(logPath);
label.string = logPath;

let logExists = 'jsb.fileUtils.isFileExist: ' + jsb.fileUtils.isFileExist(path);
cc.log(logExists);
label.string += '\n' + logExists;

let picData = jsb.fileUtils.getDataFromFile(path);
cc.log(picData);
label.string += '\n' + picData;

麻烦尽快处理,应该是小问题,还可以放进1.8.1里:slightly_smiling:

收到,我看看。尽管就几行代码,但是我们也不好猜测你到底是哪几行。所以demo也可以省去我们很多猜测时间。谢谢理解。

我这里完全正常:

我改了一行代码:

label.string += “\n” + picData.length;

否则文本太大导致,崩溃。改为label显示 数据长度。

我是在 iphone6 最新系统,cocos2d-x-lite 仓库 v1.8-release 分支验证的。
但是这块逻辑一直没变化。

iOS 9.3.2,老版本的有问题?

@dumganhar 肯定不是只有我这里是这样, 别放弃找原因啊

你换个新版本iphone看看?
我去试试9.3.5的,理论上不应该。

嗯,我晚上测试下高版本,这会测试下ipad

ipad, iOS 10.1.1 正常。。。。:sweat_smile:

初步怀疑是低版本iOS问题,幸亏我的古董iphone5没有扔:relaxed:


补充:iPhone高版本iOS 11.2.1 也没有问题。 @dumganhar

解决了:
https://github.com/cocos-creator/cocos2d-x-lite/pull/1066

赞一个,:grinning::grinning::grinning::grinning::grinning:

我也遇到同样问题。
FileUtils::getDataFromFile - filename: /var/containers/Bundle/Application/58E448EB-E8A2-4635-8E23-1965E182586A/niuniuv2-mobile.app/res/Scenes/GameFightSceneCP2.csb, ret: 2
FileUtils::getContents - errno:24,errormsg:Too many open files
这是IOS 10.2真机测试。在运行一段时间就会CRASH。出现too many open files 有解决方法吗?

你这个不是同一个问题啊。