如何正确地将NSMutableArray传递给具有自定义数据模型的NSUserDefaults?

让我先说一下,我的代码有目的被遮蔽了一点。 我知道这个名字不好。 我正在尝试使用新的iOS 8function将小部件添加到我的应用程序中。 我正在使用这个链接作为教程

现在,到目前为止,当我的提交button在我的应用程序中被调用时,我在我的ViewController中。 到目前为止,我已经将该数组中的所有数据传递给了该数组。

//Passes the array of times to the shared group to be called by the notification center widget. NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.myGroup.TodayExtensionSharingDefaults"]; NSData *encodedArray = [NSKeyedArchiver archivedDataWithRootObject:tableViewController.TimeArray]; [sharedDefaults setObject:encodedArray forKey:@"TimesArray"]; [sharedDefaults synchronize]; 

但是,我的数组存储了我创build的自定义数据模型,所以在我的数据模型中有:

 - (void)encodeWithCoder:(NSCoder *)encoder { //Encode properties, other class variables, etc [encoder encodeInt:_stopNumber forKey:@"stopNumber"]; [encoder encodeObject:_route forKey:@"route"]; [encoder encodeObject:_number forKey:@"number"]; [encoder encodeInt:_time forKey:@"time"]; [encoder encodeObject:_minutesOrApproaching forKey:@"@minutesOrApproaching"]; [encoder encodeObject:_noPrediction forKey:@"noPrediction"]; } - (id)initWithCoder:(NSCoder *)decoder { self = [super init]; if(self) { //decode properties, other class vars _stopNumber = [decoder decodeIntForKey:@"stopNumber"]; _route = [decoder decodeObjectForKey:@"route"]; _number = [decoder decodeObjectForKey:@"number"]; _time = [decoder decodeIntForKey:@"time"]; _minutesOrApproaching = [decoder decodeObjectForKey:@"minutesOrApproaching"]; _noPrediction = [decoder decodeObjectForKey:@"noPrediction"]; } return self; } 

然后在我的小工具,我有这个代码被称为:

 NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.myGroup.TodayExtensionSharingDefaults"]; NSData *myDecodedObject = [defaults objectForKey: @"TimesArray"]; NSArray *decodedArray =[NSKeyedUnarchiver unarchiveObjectWithData: myDecodedObject]; int i = 0; for (ETA *eta in decodedArray) { if(i == 0){ _stopNumber.text = eta.number; } UILabel *label = [timeSlots objectAtIndex:i]; label.text = eta.minutesOrApproaching; i++; } 

我的问题是,我不断得到:

*终止应用程序由于未捕获的exception“NSInvalidUnarchiveOperationException”,原因:'* – [NSKeyedUnarchiver decodeObjectForKey:]:无法解码类(ETA)的对象'在这里input代码

所以我有点失落,因为我不知道我在这里做错了什么。 如果有人能帮助我指出正确的方向,这将是非常好的。 再次感谢!

所以,通过自定义类可以是一个痛苦。 虽然所有的代码似乎是正确的,我仍然得到错误。 于是我退后一步,看着我的自定义对象,问自己:“我真的需要从这里得到什么?” 并使用该过程决定我只需要某些值,所以我只encryption这些值而不是对象。 由于这些值是整数和string,所以它们被内置到iOS中以便如何编码和解码。 从那里,我能够通过@ meda的答案和我的想法周围的价值。