Writing and reading custom object to file IOS

前端 未结 3 1928
盖世英雄少女心
盖世英雄少女心 2021-01-07 06:05

i have this object.

@interface SeccionItem : NSObject 
{
    NSString * title;
    NSString * texto;
    NSArray * images;
}

@property (nona         


        
相关标签:
3条回答
  • 2021-01-07 06:31

    For those who are seeking the solution in swift, I was able to write and read dictionary to file system as follows :

    Write:

    let data = NSKeyedArchiver.archivedData(withRootObject: dictionary)  
    do {
        try data.write(to: destinationPath)
    } catch let error {
        print("\(error.localizedDescription)")
    }
    

    Read:

    do
    {
        let data = try Data.init(contentsOf: path)
        // path e.g. file:///private/var/ .... /Documents/folder/filename
        if let dict = NSKeyedUnarchiver.unarchiveObject(with: data){
            return dict                 
        }
    }
    catch let error
    {
        print("\(error.localizedDescription)")
    }
    
    0 讨论(0)
  • 2021-01-07 06:41

    Take a look at the documentation of NSKeyedArchiver, especially the archiveWithRootObject:toFile: method.

    The path is basically where the file should be stored including the file name. For example you can store your array in your app Documents folder with file name called Storage. The code snippet below is quite common:

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *docDir = [paths objectAtIndex: 0]; 
    NSString* docFile = [docDir stringByAppendingPathComponent: @"Storage"];
    

    The method NSSearchPathForDirectoriesInDomains is used instead of absolute path because Apple can be changing the Documents folder path as they want it.

    You can use the docFile string above to be supplied to the toFile parameter of the archiveWithRootObject:toFile: method.

    0 讨论(0)
  • 2021-01-07 06:45

    Use the following method to save data

    -(NSString*)saveFilePath    {
    
            NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *pathString = [[pathArray objectAtIndex:0] stringByAppendingPathComponent:@"data"];
            //NSString *pathString = [[NSBundle mainBundle]pathForResource:@"Profile" ofType:@"plist"];
            return pathString;
    
        }
    
    -(void)saveProfile  {
        SeccionItem *data = [[SeccionItem alloc]init]
        data. title = @"title";
        data. texto = @"fdgdf";
        data.images = [NSArray arrayWithObjects:@"dfds", nil];
    
    
        NSMutableData *pData = [[NSMutableData alloc]init];
    
        NSString *path = [self saveFilePath];
    
        NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:pData];
        [data encodeWithCoder:archiver];
        [archiver finishEncoding];
        [pData writeToFile:path atomically:YES];
    
    }
    

    Use the following method to load data

    -(void)loadData {
    
        NSString* path = [self saveFilePath];
        //NSLog(path);
        NSMutableData *pData = [[NSMutableData alloc]initWithContentsOfFile:path];
    
        NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:pData];
        data = [[SeccionItem alloc]initWithCoder:unArchiver];
        //NSLog(@"%@",data.firstName);
        [unArchiver finishDecoding];
    
    }
    
    0 讨论(0)
提交回复
热议问题