iOS端升级async-storage与Expo后NSCocoaErrorDomain 512错误求助
问题根因
该错误仅在iOS触发是因为iOS沙箱文件系统对路径格式校验更严格:升级Expo和AsyncStorage后,存储路径生成逻辑异常,自动生成的路径中%40amdig%2Fcenflex-puraskar是URL编码后的字符,对应原始路径为@amdig/cenflex-puraskar,程序没有先递归创建两级目录,直接把带编码斜杠的字符串当成单级文件名操作,因此触发「Not a directory」报错。
解决方案
按优先级依次尝试:
- 完全卸载测试设备上的现有App,删除所有本地残留的存储目录后重新打包安装,旧版本的目录残留会导致路径校验冲突,该方案已被多数遇到同款问题的开发者验证有效。
- 若卸载重装无效,手动提前创建目标存储目录,避开自动生成路径的逻辑缺陷:
若为Expo项目,可在App入口初始化阶段用expo-file-system先创建合法目录:
若为原生React Native项目,替换为import * as FileSystem from 'expo-file-system'; import AsyncStorage from '@react-native-async-storage/async-storage'; // 启动时优先初始化存储目录 const initAsyncStorage = async () => { const targetDir = `${FileSystem.documentDirectory}ExponentExperienceData/@amdig/cenflex-puraskar`; const dirStat = await FileSystem.getInfoAsync(targetDir); if (!dirStat.exists) { // 开启intermediates支持递归创建多级目录 await FileSystem.makeDirectoryAsync(targetDir, { intermediates: true }); } } initAsyncStorage();react-native-fs执行相同的目录创建逻辑即可。 - 以上方案均无效时,回退到升级前正常运行的Expo版本,配套使用Expo官方对应版本推荐的AsyncStorage版本,不要单独跨大版本升级AsyncStorage依赖。
内容的提问来源于stack exchange,提问作者Ahmed - Projects
相关产品推荐
相关产品推荐

