Correct way to save/serialize custom objects in iOS

后端 未结 4 1927
北海茫月
北海茫月 2020-11-29 18:29

I have a custom object, a UIImageView subclass which has a few gestureRecognizer objects.

If I have a number of these objects stored in a

4条回答
  •  情深已故
    2020-11-29 18:53

    My implementation for something similar is the following and works perfectly :

    The custom object (Settings) should implement the protocol NSCoding :

    -(void)encodeWithCoder:(NSCoder *)encoder{
        [encoder encodeObject:self.difficulty forKey:@"difficulty"];
        [encoder encodeObject:self.language forKey:@"language"];
        [encoder encodeObject:self.category forKey:@"category"];
        [encoder encodeObject:self.playerType forKey:@"playerType"];
    }
    
    - (id)initWithCoder:(NSCoder *)decoder {
        if (self = [super init]) {
            self.difficulty = [decoder decodeObjectForKey:@"difficulty"];
            self.language = [decoder decodeObjectForKey:@"language"];
            self.category = [decoder decodeObjectForKey:@"category"];
            self.playerType = [decoder decodeObjectForKey:@"playerType"];
        }
        return self;
    }
    

    The following code writes the custom object to a file (set.txt) and then restores it to the array myArray :

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"set.txt"];
    
    NSMutableArray *myObject=[NSMutableArray array];
    [myObject addObject:self.settings];    
    
    [NSKeyedArchiver archiveRootObject:myObject toFile:appFile]; 
    
    NSMutableArray* myArray = [NSKeyedUnarchiver unarchiveObjectWithFile:appFile]; 
    

提交回复
热议问题