我最初有一个 Expo 管理的项目,但由于我需要添加订阅服务,所以我不得不将其弹出。世博会管理期间一切顺利。现在,我的应用程序可以用“expo start”打开,它在 iOS 模拟器中打开应用程序,我没有任何错误消息。一切都按预期工作。当我构建为 native 应用程序时出现问题,它出错了
JSON value '3000' of type NSString cannot be converted to NSNumber
+[RCTConvert NSNumber:]
RCTConvert.m:60
+[RCTConvert double:]
RCTBridgingToDouble(objc_object*)
JS::NativeNetworkingIOS::SpecSendRequestQuery::timeout() const
-[RCTNetworking sendRequest:callback:]
__invoking___
-[NSInvocation invoke]
-[NSInvocation invokeWithTarget:]
-[RCTModuleMethod invokeWithBridge:module:arguments:]
facebook::react::invokeInner(RCTBridge*, RCTModuleData*, unsigned int, folly::dynamic const&)
facebook::react::RCTNativeModule::invoke(unsigned int, folly::dynamic&&, int)::$_0::operator()() const
invocation function for block in facebook::react::RCTNativeModule::invoke(unsigned int, folly::dynamic&&, int)
_dispatch_call_block_and_release
_dispatch_client_callout
_dispatch_lane_serial_drain
_dispatch_lane_invoke
_dispatch_workloop_worker_thread
_pthread_wqthread
start_wqthread
我试图在我的项目中搜索值“3000”,但找不到任何内容。我知道它以某种方式在某处提供数字 3000 作为无法转换为数字的字符串。同样,此问题仅作为 native 构建出现。世博会工作得很好。我现在也不知道我将如何调试这个......
最佳答案
我终于解开了谜团。在这里为遇到此问题的任何其他人发布答案。
如果你确实有一个 expo 管理的项目并且你弹出它并且你在 NSString cannot be converted to NSNumber
for iOS 或 java.lang.String cannot be cast to java.lang.double
检查你的 .env 文件。在我的例子中,我设置了 API_REQUEST_TIMEOUT = '3000'
并将其用于 axios
const instance = axios.create({
baseURL: API_URL,
timeout: API_REQUEST_TIMEOUT,
});
3000 没有出现在我的搜索中,因为它在我的 .env 文件中。并且此错误消息消失了,因为我相信当在 React Native 调试器中激活网络检查时,它将覆盖请求超时。如果您遇到此问题,请仔细检查您的 .env 文件。
修复:
const instance = axios.create({
baseURL: API_URL,
timeout: 3000,
});
请注意,超时值不会作为字符串传递。
关于react-native - 在使用 NSString 的 Expo Eject 错误后 React Native 无法转换为 NSNumber,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65532826/