Search code examples
iphoneiosobjective-cipadplist

Creating a plist if one doesn't exist


I've got a bit of code that imports settings into my app from an email, but it only works if the plist it imports the settings into already exists.

This is the code I'm using currently to import the settings and write to the plist.

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
if (url){

        NSDictionary *openedDictionary = [NSDictionary dictionaryWithContentsOfURL:url];

        // get paths from root direcory
        NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
        // get documents path
        NSString *documentsPath = [paths objectAtIndex:0];
        // get the path to our Data/plist file
        NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"Data.plist"];
        NSDictionary *originalDictionary = [NSDictionary dictionaryWithContentsOfFile:plistPath];

        NSMutableDictionary *newDictionary = [originalDictionary mutableCopy];
        for (NSString *key in openedDictionary) {
            if (!newDictionary[key]) {
                newDictionary[key] = openedDictionary[key];
            }
        }

        [newDictionary writeToFile:plistPath atomically:YES];

    }
    NSError *error = nil;
    if (![[NSFileManager defaultManager] removeItemAtURL:url error:&error]) {
        NSLog(@"error while deleting: %@", [error localizedDescription]);
    }
    return YES;
}

But what I need to do is create that Data.plist if it's not there, or alternatively rename the plist that's emailed to Data.plist and store it provided there isn't already a Data.plist.


Solution

  • NSFileManager *defaultManager = [NSFileManager defaultManager];
    
        if ([defaultManager fileExistsAtPath:plistPath]) 
       {
            // rename the file
        }
        else 
        {
            //create empty file
        }
    

    this is how you can create empty plist file

    NSDictionary *dict = [NSDictionary dictionary];
    
    //you can create file in any path in app sandbox, for example I'm creating in document dir.
    NSString *FilePathWithName = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    FilePathWithName = [FilePathWithName stringByAppendingPathComponent:@"name.plist"];
    [dict writeToFile:FilePathWithName atomically:YES];
    

    and for renaming what you can do is, you can load the .plist/.property file (that you want to rename) as dictionary and write that Dictionary with new name (write plist as above) and delete the .plist/.property file.