将Array保存到userDefault

时间:2017-08-01 13:20:14

标签: ios objective-c arrays swift3 nsuserdefaults

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

我正在尝试将 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.'

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

1 个答案:

答案 0 :(得分:1)

UIViewControllers是在UserDefaults中保存的重物。

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