Using NSKeyedArchiver to store custom data model

后端 未结 3 1902
星月不相逢
星月不相逢 2021-02-06 00:45

I\'m working on a rss reader. It is just a tableview and each cell shows a custom data model RSSEntry. And I have a NSMutableArray allEntries which contains all RSSEntry I got f

相关标签:
3条回答
  • 2021-02-06 00:58

    Place all the entries you want to store into an NSArray and use this code:

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:entries];
    

    Where entries is your array of entries. Nice and easy, just one line of code.

    To unarchive, just use

    NSArray *entries = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    

    NSKeyedArchiver is able to archive any data structure, even a very complex one, of Objective-C objects that implement the NSCoding protocol, including nested NSArrays, NSDictionarys, and custom objects, to a file. NSKeyedUnarchiver does the reverse, taking any data produced by NSKeyedArchiver and reestablishing the original object graph that was archived. Technically, they could just be a single class, but Apple decided to separate them by functionality because this is more grammatically correct or something :)

    I assume you are able to write the resulting NSData object to a file, and read it back again.

    0 讨论(0)
  • 2021-02-06 00:59

    For iOS 12:

    for archivedDataWithRootObject:

    NSData *myDicData = [NSKeyedArchiver archivedDataWithRootObject:AllDataDic 
                                         requiringSecureCoding:YES error:nil];
    [[NSUserDefaults standardUserDefaults] setObject:myDicData forKey:@"Yourkey"];
    

    for unarchivedObjectOfClass:

    NSData *tempData = [[NSUserDefaults standardUserDefaults] valueForKey:@"Yourkey"];
    NSDictionary *myDicProfile = [NSKeyedUnarchiver unarchivedObjectOfClass:[NSDictionary class] 
                                                    fromData:tempData error:nil];
    
    0 讨论(0)
  • 2021-02-06 01:08

    You could store an NSDictionary as following

    NSDictionary *Your_NSDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                   @"Obj1", @"Key1",
                                   @"Obj2", @"Key2", nil];
    //store dictionary
    NSMutableData *yourData = [[NSMutableData alloc] init];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:yourData];
    [archiver encodeObject:Your_NSDictionary forKey: @"key"];
    archiver finishEncoding];
    [yourData writeToFile:@"FilePath" atomically:YES];
    [yourData release];
    [archiver release];
    
    
    //Load dictionary
    
    NSData *yourData = [[NSMutableData alloc]initWithContentsOfFile:@"FilePath"];
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:yourData];
    Your_NSDictionary = [unarchiver decodeObjectForKey: @"key"];
    [unarchiver finishDecoding];
    [unarchiver release];
    [yourData release];
    
    0 讨论(0)
提交回复
热议问题