【问题标题】:Saving Array to userDefault将数组保存到 userDefault
【发布时间】:2018-01-08 09:24:57
【问题描述】:

我的要求是用户必须浏览上次访问的页面,所以

我正在尝试将 UIViewController 数组保存到 NSUserDefault 但应用程序每次都崩溃

let array = self.navigationController?.viewControllers
UserDefaults.standard.set(array, forKey: "LastNavigationArray")

对于这个尝试崩溃是

 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object (

另外,我尝试了以下代码,但没有运气

let array = self.navigationController?.viewControllers
let encodedData = NSKeyedArchiver.archivedData(withRootObject: array)

UserDefaults.standard.set(encodedData, forKey: "LastNavigationArray") 

对于这次崩溃是

Assertion failure in -[UICGColor encodeWithCoder:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.7.47/UIColor.m:1549
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Only RGBA or White color spaces are supported in this situation.'

如果这是错误的,请建议我正确的实现方法。 因为我有非常复杂的导航流程。

【问题讨论】:

  • 崩溃与您根据日志保存数组无关
  • @kapsym NO 它正在与相同的日志崩溃
  • @kapsym 你想让我把整个堆栈跟踪吗?
  • 我想在这种情况下只支持 RGBA 或白色颜色空间。如果 Apple 在他们的崩溃日志中给你提示,那将非常有帮助......
  • @MikeAlter 如果您只想保存用户上次所在的 VC,您可以只保存标识符。有什么理由将整个 Viewcontrollers 保存为用户默认值?

标签: ios objective-c arrays swift3 nsuserdefaults


【解决方案1】:

UIViewControllers 是保存在 UserDefaults 中的非常重的对象。

您可以为自己保留一个自定义对象来识别导航堆栈中的所有视图控制器。例如,您可以使用每个单独的视图控制器的类名字符串构造一个自定义字符串。或者,更好的选择是仅将最后一个视图控制器的类名存储在用户默认值中。当用户再次打开您的应用程序时,您可以通过检查类名来实例化并呈现该视图控制器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多