如果不存在,则创建一个plist

时间:2013-08-01 11:19:55

标签: iphone ios objective-c ipad plist

我有一些代码可以通过电子邮件将设置导入到我的应用中,但只有在导入设置的plist已经存在的情况下才有效。

这是我目前用来导入设置并写入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;
}

但我需要做的是创建Data.plist如果它不存在,或者重命名通过电子邮件发送到Data.plist的plist并存储它,前提是还没有Data.plist

3 个答案:

答案 0 :(得分:3)

以下是我如何通过代码创建属性列表以及从中检索数据的方法。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"plist.plist"]; NSFileManager *fileManager = [NSFileManager defaultManager];

if (![fileManager fileExistsAtPath: path]) 
{
    path = [documentsDirectory stringByAppendingPathComponent: [NSString stringWithFormat: @"plist.plist"] ];
}




NSFileManager *fileManager = [NSFileManager defaultManager];
NSMutableDictionary *data;

if ([fileManager fileExistsAtPath: path]) 
{
            data = [[NSMutableDictionary alloc] initWithContentsOfFile: path];
}
else
{
    // If the file doesn’t exist, create an empty dictionary
    data = [[NSMutableDictionary alloc] init];
}

//To insert the data into the plist
int value = 5;
[data setObject:[NSNumber numberWithInt:value] forKey:@"value"];
[data writeToFile: path atomically:YES];
[data release];

// To retrieve the data from the plist
NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile: path];
int value1;
value1 = [[savedStock objectForKey:@"value"] intValue];
NSLog(@"%i",value1);
[savedStock release];

答案 1 :(得分:1)

NSFileManager *defaultManager = [NSFileManager defaultManager];
    if ([defaultManager fileExistsAtPath:plistPath]) {
        //Do stuff with path
    }
    else {
        //Write a plist to the path
    }

答案 2 :(得分:1)

NSFileManager *defaultManager = [NSFileManager defaultManager];

    if ([defaultManager fileExistsAtPath:plistPath]) 
   {
        // rename the file
    }
    else 
    {
        //create empty file
    }

这是您创建空plist文件

的方法
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];

用于重命名您可以执行的操作是,您可以将.plist/.property文件(您要重命名)加载为字典并使用新名称写入该字典(写入plist如上所述)并删除.plist/.property文件。