NSInvalidArgumentException',原因:'-[NSNull 长度]:发送到实例的无法识别的选择器

NSInvalidArgumentException', reason: '-[NSNull length]: unrecognized selector sent to instance

我的 Flutter 应用程序已更新到最新版本的 Flutter,并且我在我的应用程序中添加了 firebase_messaging。完成此操作后,此应用程序在模拟器上运行良好,但当我尝试在实际 iOS 设备上 运行 它时崩溃,并出现此错误:

  -[NSNull length]: unrecognized selector sent to instance 0x1ddcb9ee0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull length]: unrecognized selector sent to instance 0x1ddcb9ee0'
*** First throw call stack:
(0x18c8959d8 0x1a0bfeb54 0x18c7a5bbc 0x18c89801c 0x18c899f8c 0x102deadcc 0x102dec698 0x102deb1a8 0x102dea8bc 0x18c4cd298 0x18c4ce280 0x18c4aa4f0 0x18c4aafdc 0x18c4b4800 0x1d4f3b5a4 0x1d4f3e874)
libc++abi.dylib: terminating with uncaught exception of type NSException
* thread #5, queue = 'com.google.firebase.auth.globalWorkQueue', stop reason = signal SIGABRT
    frame #0: 0x00000001b86f484c libsystem_kernel.dylib`__pthread_kill + 8
libsystem_kernel.dylib`__pthread_kill:
->  0x1b86f484c <+8>:  b.lo   0x1b86f4868               ; <+36>
    0x1b86f4850 <+12>: stp    x29, x30, [sp, #-0x10]!
    0x1b86f4854 <+16>: mov    x29, sp
    0x1b86f4858 <+20>: bl     0x1b86d1f5c               ; cerror_nocancel
Target 0: (Runner) stopped.

我已经尝试了所有方法,从从应用程序中删除消息传递到检查是否已在 Xcode 中启用“推送通知”和“后台获取”,但应用程序仍然不断崩溃。错误日志显示崩溃来自 firebase.auth.globalWorkQueue,应用程序在模拟器上启动得很好。我删除了 firebase_messaging,当在模拟器上 运行 时应用程序仍然崩溃。任何建议将不胜感激。

因此,经过大约一周的不眠之夜、改组依赖项、降级、升级包和版本后,问题出在我的 flutter 代码上。随着 null 安全更改。将空值推送到本机 Firebase SDK 会导致崩溃而不是错误,并且我从我的共享首选项中获取未经检查的空值。我预计我的代码会出现错误,但发生崩溃,所以它一直在崩溃。如果您在代码中看到上述错误,您可能将空值推送到登录函数中。检查

就我而言,错误源于位置权限。在使用 Xcode 构建和 运行 应用程序时,我选择了始终允许权限。然后所有其他构建都导致 NSInvalidArgumentException'。

Flutter clean,Xcode clean build 文件夹,没有任何帮助。唯一的解决方案是手动从 iPhone 中删除应用程序,然后重新构建它。似乎在构建和 运行 应用程序时使用 Xcode Allow When Using 权限是可行的方法。由于此应用程序仅在 phone 连接到 Xcode 时才能运行。选择始终允许会导致所有后续构建出现此错误。