代码之家  ›  专栏  ›  技术社区  ›  arachide

可以读取plist文件的结构吗?

  •  -1
  • arachide  · 技术社区  · 14 年前

    我知道NSUserDefaults可以从plist文件中读取键和值。 能读懂钥匙的结构吗?

    例如:

    1,2,3,4,5

    下面的代码可以获取值“Count”

    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    
    if([defaults objectForKey:@"Count"]!=nil)
    {
    
        NSString *s=[[NSString alloc] initWithString: [defaults objectForKey:@"Count"]];
        NSInteger v=[s intValue];
        [s release];
    }
    

    但是我更喜欢把所有的选项都存储到NSArray或者更好的存储结构中。

    有可能吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Vladimir    14 年前

    我通过以下方式阅读捆绑包设置:

    // Get path to Root.plist file in settings bundle and retrieving its contents
    NSString* tPath = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"];
    settingsBundle = [[NSBundle bundleWithPath:tPath] retain];
    NSDictionary* tSetDict = [NSDictionary dictionaryWithContentsOfFile:[tPath stringByAppendingPathComponent:@"Root.plist"]];
    
    // Get array of preference dictionaries 
    NSArray* prefs = [tSetDict objectForKey:@"PreferenceSpecifiers"];
    
    // Iterate through dictionaries to find required value
    for (NSDictionary* setDict in prefs){
        NSString* type = [setDict objectForKey:@"Type"];
        if (![type isEqualToString:@"PSMultiValueSpecifier"]){
            // Get possible preference values for PSMultiValueSpecifier case
            // You may need to know value type in advance - not sure about that
            NSArray* values = [setDict objectForKey:@"Values"];
        }
    }
    
        2
  •  1
  •   TechZen    14 年前

    我不太清楚我是否理解你的问题,但你不能直接访问用户默认系统保存通过其定义的方法。你不能把它们一大块一大块地读出来。

    要读出整个默认值是不可能的,因为它们是巨大的,甚至比你在iOS上预期的还要大。

    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    NSInteger v=[defaults integerForKey:@"Count"];
    

    即使您在一个块中读取了默认值,您也只会发现自己在备用数据结构中使用了与第一次使用默认值相同的调用类型和代码来访问数据。您不妨使用默认系统。