将导航堆栈的值存储在字典 iOS 中

Posted

技术标签:

【中文标题】将导航堆栈的值存储在字典 iOS 中【英文标题】:Store values of navigation stack in a dictionary iOS 【发布时间】:2019-05-15 09:02:17 【问题描述】:

我需要跟踪用户的导航流程并将其存储在Dictionary 中,每次用户访问我应用中的任何屏幕时。我可以使用代码在控制台输出中看到导航堆栈

navigationController?.viewControllers

但不知道如何将其存储在字典中。

请帮忙

【问题讨论】:

使用dict的目的是什么? 是否需要为每个 1 获取 vc 的名称? @Sh_Khan:是的,我需要每个视图控制器的名称 @MahendraGP :实际上捕获 VC 名称的目的是将用户导航存储在 txt 文件中并发送到服务器。为此,我将首先添加流指示,然后将其写入一个文本文件 也许您可以在您的问题中添加一个小示例,例如如果用户访问 vc1 然后转到 vc2 并再次返回到 vc1,那么您希望字典中有什么? 【参考方案1】:

您可以使用navigationStack 获取所有UIViewControllers 的名称,

let controllers = self.navigationController?.viewControllers.compactMap( String(describing: type(of: $0.self)) ).joined(separator: "_")
print(controllers) //Output: "VC1_VC2_VC3"

您可以将controllers 字符串存储在您的文件中。

【讨论】:

【参考方案2】:

希望这有助于获得视图控制器。按照这个并使用单例存储到全局字典中。

全局函数:

public func storeCurrentViewController(_ currentFile: String = #file)

    let className = currentFile.components(separatedBy: "/").last ?? ""
    let classNameArr = className.components(separatedBy: ".")
    print("\n\n--> CurrentViewController:  \(classNameArr[0])")

    //*********** Use dictionary and do your logics


函数调用:

override func viewDidLoad() 
    super.viewDidLoad()
    storeCurrentViewController()

【讨论】:

希望这会有所帮助。根据需要存储到字典中。【参考方案3】:
NSArray *viewControllers = [[self navigationController] viewControllers];
                for( int i=0;i<[viewControllers count];i++)
                    id obj=[viewControllers objectAtIndex:i];    
                    NSLog(@"%@",[obj classNameForClass:[obj class]]);

不确定这是否有效。试一试……

【讨论】:

以上是关于将导航堆栈的值存储在字典 iOS 中的主要内容,如果未能解决你的问题,请参考以下文章

无法将字典中的值存储在变量中

是否有带有字典的“堆栈和地图”类似物?

将代表存储在字典中

如何使用soap Web服务ios的字典将值存储在数组中

Python,将字典存储在数据库中

Python基础之字典