让我先说明我的代码有目的被掩盖了一点。我知道这个名字不会很好。我正在尝试使用新的iOS 8功能将小部件添加到我的应用程序中。我正在使用this link as a tutorial如何使用自定义数据模型将NSMutableArray正确传递给NSUserDefaults?
现在,到目前为止,当我的提交按钮在我的应用程序中被调用时,我在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];
然而,我的数组存储我创建了一个自定义的数据模型,所以在我的数据模型,我有:
- (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++;
}
我的问题是,我不断收到:
*终止应用程序由于未捕获的异常 'NSInvalidUnarchiveOperationException',原因是: '* - [NSKeyedUnarchiver decodeObjectForKey:]:不能解码类的对象(ETA)' 在这里输入的代码
所以我有点过因为我不知道我在这里做错了什么。如果有人能帮助我指出正确的方向,那将非常棒。再次感谢!
您可能不应该使用'NSUserDefaults'来存储应用程序数据。也许使用数据库或自定义数据文件格式。 – Droppy 2014-09-25 13:51:52
这不是关于存储可变数组,它是关于[在NSUserDefaults中存储自定义对象](http://stackoverflow.com/questions/2315948/how-to-store-custom-objects-in-nsuserdefaults?rq= 1)(或者在这种情况下是一组自定义对象),不是吗? – DarkDust 2014-09-25 13:53:46
是的,但我不确定它是否与可变数组有关。另外,根据本教程,我在应用的功能部分中使用了AppData选项。 – David 2014-09-25 13:56:11