getting data from plist to NSMutableArray and writing the NSMutableArray to same plist iPhone

后端 未结 3 936
情歌与酒
情歌与酒 2020-12-20 10:05

Using this code I am trying to get the data from Templates.plist file but I am getting null value in array.

//from plist
NSString *path = [[NSBundle mainBund         


        
3条回答
  •  春和景丽
    2020-12-20 10:32

    First off you cannot write to anything in you mainBundle. For you to write to you plist you need to copy it to the documents directory. This is done like so:

    - (void)createEditableCopyOfIfNeeded 
    {
         // First, test for existence.
         BOOL success;
    
         NSFileManager *fileManager = [NSFileManager defaultManager];
         NSError *error;
         NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
         NSString *documentsDirectory = [paths objectAtIndex:0];
         NSString *writablePath = [documentsDirectory stringByAppendingPathComponent:@"Template.plist"];
         success = [fileManager fileExistsAtPath:writablePath];
    
         if (success) 
             return;
    
         // The writable file does not exist, so copy from the bundle to the appropriate location.
         NSString *defaultPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Template.plist"];
         success = [fileManager copyItemAtPath:defaultPath toPath:writablePath error:&error];
         if (!success) 
             NSAssert1(0, @"Failed to create writable file with message '%@'.", [error localizedDescription]);
    }
    

    So calling this function will check if the file exists in the documents directory. If it doesn't it copies the file to the documents directory. If the file exists it just returns. Next you just need to access the file to be able to read and write to it. To access you just need the path to the documents directory and to add your file name as a path component.

    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *filePath = [docDir stringByAppendingPathComponent:@"Template.plist"];
    

    To get the data from the plist:

    NSMutableArray *array = [[NSMutableArray alloc] initWithContentsOfFile:filePath];
    

    To write the file back to the documents directory.

        [array writeToFile:filePath atomically: YES];
    

提交回复
热议问题