ios - 保存和加载 NSMutableArray - NSUserDefaults

标签 ios objective-c nsmutablearray nsuserdefaults

我正在尝试保存 NSMutableArrayNSUserDefaults然后重新加载它并使用它来填充按钮标签。有人可以看看并告诉我我在这里做错了什么吗?

当我将文件加载到新数组时,它显示为空。我试图将标题设置为的所有按钮都在 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/

相关文章:

ios - 在 iOS 7 中将我的应用程序中的状态栏文本颜色永久更改为白色

objective-c - 如何从 obj-c/ios 中的堆栈跟踪获取源代码行

uitableview - 将 NSMutablearray 值加载到 TableView 中的问题?

ios - 你如何在 swift 中从 JSON 中排序 NSMutableArray?

ios - 如何使用 NSMutableArray/NSMutableDictionary 中的 NSPredicate 创建 NSMutableArray

ios - iOS 11 之前的行操作

ios - 在核心数据中检索/保存自定义对象时出错

ios - 对符合协议(protocol)的所有对象调用方法

objective-c - 对可能被objective-c中的另一个线程锁定的对象执行 "dirty read"的最佳方法

iphone - 如何访问类中的ABRecordRef值?