是否可以读取plist文件的结构?

时间:2010-08-10 11:50:28

标签: iphone

我知道NSUserDefaults可以读取plist文件中的键和值。 是否可以读取密钥的结构?

例如:

键'Co​​unt'是一个整数并有选项 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 个答案:

答案 0 :(得分:1)

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

// 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"];
    }
}

答案 1 :(得分:1)

我不确定我是否理解您的问题,但您无法通过其定义的方法直接访问用户默认系统。你无法在一大块中读出它们。

默认系统实际上并不是读取plist文件的一种方法,它更像是一个用于访问操作系统自身维护的数据库的API。虽然,你在iPhone上看不到太多,但它实际上是一个非常庞大而复杂的系统,不仅可以管理个人应用程序,还可以管理用户,用户组,计算机和网络。在iOS上看起来微不足道,因为你没有适当的MacOS配置和使用灵活性。

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

您应该使用针对所存储数据类型的专用方法之一来访问密钥中的数据,而不是跳过答案中显示的代码中的箍。在这种情况下:

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

即使您确实在一个块中读取了默认值,您也会发现自己使用相同类型的调用和代码来访问备用数据结构中的数据,就像在第一个位置使用默认值一样。您也可以使用默认系统。