How to store custom objects in NSUserDefaults

后端 未结 7 1759
悲&欢浪女
悲&欢浪女 2020-11-21 11:48

Alright, so I\'ve been doing some poking around, and I realize my problem, but I don\'t know how to fix it. I have made a custom class to hold some data. I make objects fo

7条回答
  •  不要未来只要你来
    2020-11-21 12:22

    On your Player class, implement the following two methods (substituting calls to encodeObject with something relevant to your own object):

    - (void)encodeWithCoder:(NSCoder *)encoder {
        //Encode properties, other class variables, etc
        [encoder encodeObject:self.question forKey:@"question"];
        [encoder encodeObject:self.categoryName forKey:@"category"];
        [encoder encodeObject:self.subCategoryName forKey:@"subcategory"];
    }
    
    - (id)initWithCoder:(NSCoder *)decoder {
        if((self = [super init])) {
            //decode properties, other class vars
            self.question = [decoder decodeObjectForKey:@"question"];
            self.categoryName = [decoder decodeObjectForKey:@"category"];
            self.subCategoryName = [decoder decodeObjectForKey:@"subcategory"];
        }
        return self;
    }
    

    Reading and writing from NSUserDefaults:

    - (void)saveCustomObject:(MyObject *)object key:(NSString *)key {
        NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:object];
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        [defaults setObject:encodedObject forKey:key];
        [defaults synchronize];
    
    }
    
    - (MyObject *)loadCustomObjectWithKey:(NSString *)key {
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSData *encodedObject = [defaults objectForKey:key];
        MyObject *object = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject];
        return object;
    }
    

    Code shamelessly borrowed from: saving class in nsuserdefaults

提交回复
热议问题