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

向Settings.bundle中的PSMultiValueSpecifier添加选项

  •  2
  • ruralcoder  · 技术社区  · 15 年前

    下面是Root.plist中PSMultiValueSpecifier的示例

    <key>Type</key>
    <string>PSMultiValueSpecifier</string>
    <key>Title</key>
    <string>Options</string>
    <key>DefaultValue</key>
    <string></string>
    <key>Key</key>
    <string>optionSelection_preference</string>
    <key>Values</key>
    <array>
        <string>option_1_key</string>
    </array>
    <key>Titles</key>
    <array>
        <string>Option 1</string>
    </array>
    

    所以我想加上“选项2”这是关键。所以我写了下面的代码(部分):

    NSDictionary* rootPlist = [NSDictionary dictionaryWithContentsOfFile:settingsBundle];
    
    if (rootPlist == nil)
        return NO;
    
    NSArray* specifiers = [rootPlist objectForKey:@"PreferenceSpecifiers"];
    
    NSMutableDictionary *multiValueSpecifier = nil;
    
    for (NSMutableDictionary *specifier in specifiers)
        {
        if ([[specifier objectForKey:@"Key"] isEqualToString:speficierKey] == YES && [[specifier objectForKey:@"Type"] isEqualToString:@"PSMultiValueSpecifier"] == YES)
            {
            multiValueSpecifier = specifier;
            break;
            }
        }
    
    if (multiValueSpecifier == nil)
        return NO;
    
    NSMutableArray* titlesArray = [[multiValueSpecifier objectForKey:@"Titles"] mutableCopy];
    NSMutableArray* valuesArray = [[multiValueSpecifier objectForKey:@"Values"] mutableCopy];
    
    [titlesArray addObject:title];
    [valuesArray addObject:value];
    
    [multiValueSpecifier setObject:titlesArray forKey:@"Titles"];
    [multiValueSpecifier setObject:valuesArray forKey:@"Values"];
    
    return [rootPlist writeToFile:settingsBundle atomically:YES];
    

    问题:重新加载时,新条目将消失,只保留从XCode添加的条目。

    1 回复  |  直到 15 年前
        1
  •  3
  •   Ole Begemann    15 年前

    无论如何,这在应用商店应用程序中是行不通的。无法修改设置捆绑包,因为这将修改应用程序捆绑包的内容,而应用程序商店应用程序不允许使用该捆绑包,因为它将使其签名无效。