Attempt to set a non-property-list object as an NSUserDefaults

前端 未结 11 1733
闹比i
闹比i 2020-11-22 15:00

I thought I knew what was causing this error, but I can\'t seem to figure out what I did wrong.

Here is the full error message I am getting:

Attempt to se         


        
11条回答
  •  旧巷少年郎
    2020-11-22 15:38

    First off, rmaddy's answer (above) is right: implementing NSCoding doesn't help. However, you need to implement NSCoding to use NSKeyedArchiver and all that, so it's just one more step... converting via NSData.

    Example methods

    - (NSUserDefaults *) defaults {
        return [NSUserDefaults standardUserDefaults];
    }
    
    - (void) persistObj:(id)value forKey:(NSString *)key {
        [self.defaults setObject:value  forKey:key];
        [self.defaults synchronize];
    }
    
    - (void) persistObjAsData:(id)encodableObject forKey:(NSString *)key {
        NSData *data = [NSKeyedArchiver archivedDataWithRootObject:encodableObject];
        [self persistObj:data forKey:key];
    }    
    
    - (id) objectFromDataWithKey:(NSString*)key {
        NSData *data = [self.defaults objectForKey:key];
        return [NSKeyedUnarchiver unarchiveObjectWithData:data];
    }
    

    So you can wrap your NSCoding objects in an NSArray or NSDictionary or whatever...

提交回复
热议问题