我的应用程序使用初始视图控制器启动(将其称为StartVC)。现在,当用户按下继续按钮时,我将在StartVC上方显示一个导航堆栈(将其称为RegisterVC)。这个导航堆栈将包含5个视图控制器,每当用户使用按钮动作向前移动时,我都会在其中推入该视图控制器。在第5个视图控制器之后,我将启动一个新的导航堆栈(将其称为LoginVC)。
现在,我的用例是我不希望StartVC和RegisterVC驻留在内存中,因为一旦用户完成注册,它们就没有用了。为了实现此目的,我将AppDelegate窗口的根视图控制器更改为LoginVC。
以下是我在RegisterVC的第五个视图控制器上尝试过的选项:
1)更改键盘窗口
UIApplication.shared.keyWindow?.rootViewController = LoginVC
UIApplication.shared.keyWindow?.makeKeyAndVisible()
Run Code Online (Sandbox Code Playgroud)
2)变更视窗
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = LoginVC
appDelegate.window?.makeKeyAndVisible()
Run Code Online (Sandbox Code Playgroud)
3)在分配新的根视图控制器之前,将其作为零。
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = nil
appDelegate.window?.rootViewController = LoginVC
appDelegate.window?.makeKeyAndVisible()
Run Code Online (Sandbox Code Playgroud)
4)我也直接从AppDelegate尝试了上述选项,而不是从第5个视图控制器进行尝试。
使用以上所有选项,我尝试通过在所有视图控制器上查看deinit来进行调试,但是没有一个被释放。另外,我可以在xcode Debug View Hierarchy中看到LoginVC下的第5个视图控制器。
因为没有从内存中删除它们,所以我面临的实际问题是在显示LoginVC之后,我有一个背景色alpha较小的视图控制器。因此,我看到了其下方的RegisterVC 5th视图控制器。
任何对此的帮助表示赞赏...
问题值:identifierForVendor.uuidString
\n\n根据苹果文档:
\n\n\n\n\n当应用程序(或来自同一供应商的另一个应用程序)安装在 iOS 设备上时,此属性中的值保持不变。当用户从设备中删除所有供应商\xe2\x80\x99s 应用程序并随后重新安装其中一个或多个应用程序时,该值会发生变化。当使用 Xcode 安装测试版本或使用临时分发在设备上安装应用程序时,该值也可能会更改。因此,如果您的应用程序在任何地方存储此属性的值,您应该妥善处理标识符更改的情况。
\n
设想:
在这里,这个值UIDevice.current.identifierForVendor!.uuidString
发生了变化。这对我们来说非常重要,因为我们有一个与该值相关联的应用程序更新逻辑。我们假设当用户从 TestFlight/AppStore 更新应用程序时该值不会改变,因为两者都是使用 AppStore 分发配置文件构建的。
注意:用户没有删除/卸载该应用程序。他刚刚将版本从 v1.0.0(0) 更新到 v1.0.0(1)。
\n\n请让我知道你的想法。
\n在我的一个iOS应用中,访问钥匙串时(在两种情况下,即设置一个项目并获取一个项目)时,我看到多次崩溃,错误代码为25308。
几个细节:
1)我使用的是第三方钥匙扣包装https://github.com/kishikawakatsumi/KeychainAccess
2)辅助功能选项设置为“ whenUnlockedThisDeviceOnly ”
3)这不是发生在所有用户。我无法重现它。
4)我正在AppDelegate中的几个地方访问钥匙串。在应用启动时报告的崩溃很少,而在Firebase令牌刷新通知观察器方法中报告的崩溃很少。
5)在didFinishLaunch中,我尝试访问钥匙串项的值,就像在Firebase令牌刷新中一样,我试图将新的令牌值设置为钥匙串。
根据我的发现,我知道在设备处于锁定状态时用户尝试访问钥匙串时,将返回此错误代码25308 。但是我的Fabric(崩溃报告工具)显示,在所有这些崩溃中,“应用处于焦点”状态。
因此,这使我困惑于多个问题,例如:
1)除设备未锁定状态外,还有哪些情况会引发此错误25308?
2)Firebase令牌刷新通知是否导致该应用的后台启动?如果是这样,我该如何重现。(这里的一个支持之处是我知道该应用未卸载)
于01/03更新:
似乎根本原因是“当Firebase生成新令牌时,应用正在启动,而当设备处于锁定状态时,此启动正在发生,因此,钥匙串访问引发了此类错误25308。” 有人知道新的Firebase令牌如何启动已处于终止状态的应用程序吗?
感谢您对此的回应。谢谢..
我有一个firebase云函数,它将在正常运行的HTTP请求上调用。
现在,我想从JSON文件中读取数据以获取某些业务逻辑。以下是我尝试读取JSON文件的2种方法:
选项#1)将JSON文件保存在我的nodejs项目的“ public”目录中并进行部署。得到了一个我正在使用的托管URL,如下所示。但是它抛出一个错误,提示“错误:getaddrinfo ENOTFOUND ...”
选项#2)将JSON文件上传到Firebase云存储。没有找到任何示例来尝试这一点。最终得到以下代码:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const Firestore = require('@google-cloud/firestore');
const firestore = new Firestore();
const http = require('http');
const url = require('url');
// Option #2 required variables
var storage = require('@google-cloud/storage');
const gcs = storage({projectId: "<Project ID>"});
const bucket = gcs.bucket("<bucket-name>");
const file = bucket.file("<filename.json>")
// HTTP Trigger
exports.functionName = functions.https.onRequest((req, res) => {
var request = require('request');
var paramValue = req.body.queryParam;
console.log(paramValue);
// Option #1 - Using hosted URL …
Run Code Online (Sandbox Code Playgroud)node.js google-cloud-storage firebase google-cloud-functions firebase-storage