我正在尝试保存 NSMutableArray
至NSUserDefaults
然后重新加载它并使用它来填充按钮标签。有人可以看看并告诉我我在这里做错了什么吗?
当我将文件加载到新数组时,它显示为空。我试图将标题设置为的所有按钮都在 ibCollectionOutlet 中,称为按钮
-(void)save {
[[NSUserDefaults standardUserDefaults] setObject:self.pressCountArray forKey:@"savedFile"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
-(void)load{
NSMutableArray *countArray = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"savedFile"] mutableCopy];
for (NSInteger i = 0; i < [self.pressCountArray count]; i++){
self.pressCountArray[i] = countArray[i];
}
for (NSInteger i = 0; i < [self.buttons count]; i++){
UIButton *btn = self.buttons[i];
int curCnt = [[self.pressCountArray objectAtIndex:i] integerValue];
[btn setTitle:[NSString stringWithFormat:@"%i",curCnt] forState:UIControlStateNormal];
}
}
最佳答案
我认为您的数组包含自定义对象。
如果是这种情况,那么您应该实现 NSCoding
自定义模型类中的协议(protocol)(用于序列化和反序列化)。
在您的类中实现以下 NSCoding 协议(protocol)方法:
- (void)encodeWithCoder:(NSCoder *)encoder;
- (id)initWithCoder:(NSCoder *)decoder;
之后保存数据,如:
NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:self.pressCountArray];
[[NSUserDefaults standardUserDefaults] setObject:encodedObject forKey:[NSString stringWithFormat:@"savedFile"]];
并检索数据,如:
NSData *encodedObject = [[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithFormat:@"savedFile"]];
self.pressCountArray = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject];
关于ios - 保存和加载 NSMutableArray - NSUserDefaults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25241400/