Search code examples
iosplist

How can i save, retrieve, delete & update my data in Plist file in ios?


I am creating a iPhone app in which i get all countries name, logo & player name. I want to save that data in .plist instead of sqlite server. I don't know how to create a plist file in DocumentDirectory and save the data.

Please somebody suggest me how to save data in plist file.


Solution

  • I am going through with screenshot and step by step. Please follow this and you will get your answer.

    First you have to create Property List through your Xcode.

    Step:1

    enter image description here

    Step:2

    enter image description here

    Step:3

    Save data on your save button action :

       // Take 3 array for save the data .....
    
        -(IBAction)save_Action:(id)sender
        {
            NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentsPath = [paths objectAtIndex:0];
            NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"manuallyData.plist"];
    
            [self.nameArr addObject:self.nameField.text];
            [self.countryArr addObject:self.countryField.text];
            [self.imageArr addObject:@"image.png"];
    
            NSDictionary *plistDict = [[NSDictionary alloc] initWithObjects: [NSArray arrayWithObjects: self.nameArr, self.countryArr, self.imageArr, nil] forKeys:[NSArray arrayWithObjects: @"Name", @"Country",@"Image", nil]];
    
            NSError *error = nil;
            NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:plistDict format:NSPropertyListXMLFormat_v1_0 errorDescription:&error];
    
            if(plistData)
            {
                [plistData writeToFile:plistPath atomically:YES];
                alertLbl.text = @"Data saved sucessfully";
            }
            else
            {
                alertLbl.text = @"Data not saved";
            }
        }
     // Data is saved in your plist and plist is saved in DocumentDirectory
    

    Step:4

    Retrieve Data from plist File:

        NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsPath = [paths objectAtIndex:0];
        NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"manuallyData.plist"];
    
        if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath])
        {
            plistPath = [[NSBundle mainBundle] pathForResource:@"manuallyData" ofType:@"plist"];
        }
    
        NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
        self.nameArr = [dict objectForKey:@"Name"];
        self.countryArr = [dict objectForKey:@"Country"];
    

    Step:5

    Remove data from plist file:

        NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsPath = [paths objectAtIndex:0];
        NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"manuallyData.plist"];
        NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithContentsOfFile:(NSString *)plistPath];
    
        self.nameArr = [dictionary objectForKey:@"Name"];
        self.countryArr = [dictionary objectForKey:@"Country"];
    
        [self.nameArr removeObjectAtIndex:indexPath.row];
        [self.countryArr removeObjectAtIndex:indexPath.row];
    
        [dictionary writeToFile:plistPath atomically:YES];
    

    Step:6

    Update your data on Update click Action:

        NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsPath = [paths objectAtIndex:0];
        NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"manuallyData.plist"];
    
        if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath])
        {
            plistPath = [[NSBundle mainBundle] pathForResource:@"manuallyData" ofType:@"plist"];
        }
    
        self.plistDic = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
    
        [[self.plistDic objectForKey:@"Name"] removeObjectAtIndex:self.indexPath];
        [[self.plistDic objectForKey:@"Country"] removeObjectAtIndex:self.indexPath];
        [[self.plistDic objectForKey:@"Image"] removeObjectAtIndex:self.indexPath];
    
        [[self.plistDic objectForKey:@"Name"] insertObject:nameField.text atIndex:self.indexPath];
        [[self.plistDic objectForKey:@"Country"] insertObject:countryField.text atIndex:self.indexPath];
        [[self.plistDic objectForKey:@"Image"] insertObject:@"dhoni.jpg" atIndex:self.indexPath];
    
        [self.plistDic writeToFile:plistPath atomically:YES];