2017-08-01 61 views
0

我的要求是用户必须浏览最后访问的网页,从而保存阵列来userDefault

我想的阵列的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 (

另外,我已经尝试使用以下代码b UT斯达康没有运气

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.' 

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

+2

崩溃与您根据日志保存数组无关! –

+0

@kapsym不,它与同一日志崩溃 –

+0

@kapsym你想让我把整个堆栈跟踪? –

回答

1

UIViewControllers实际上是很重的对象,要保存在UserDefaults中。

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