如何写入AppName-Info.plist

时间:2013-04-10 11:45:45

标签: iphone ios objective-c xcode ipad

我手动向我的AppName-Info.plist添加了一个名为“App”的密钥,我可以通过调用此代码从中获取值

NSBundle *mainBundle;
mainBundle = [NSBundle mainBundle];

NSString *value = [mainBundle objectForInfoDictionaryKey:@"App"];

NSLog(@"App: %@",value);

但我不能做的是用任何代码改变价值..这可能吗?如果是,怎么办呢?

提前感谢您的帮助:)

3 个答案:

答案 0 :(得分:4)

您应该考虑NSUserDefaults ,或者如果您想修改捆绑的.plist,请尝试此操作。

    NSString* plistFilePath = nil;
NSFileManager* manager = [NSFileManager defaultManager];
if ((plistFilePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"mySpecial/PathTo.plist"])) 
{
    if ([manager isWritableFileAtPath:plistFilePath]) 
    {
        NSMutableDictionary* infoDictioio = [NSMutableDictionary dictionaryWithContentsOfFile:plistFilePath];
        [infoDictio setObject:@"foo object" forKey:@"fookey"];
        [infoDictio writeToFile:plistFilePath atomically:NO];
        [manager setAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] ofItemAtPath:[[NSBundle mainBundle] bundlePath] error:nil];
    }
}

答案 1 :(得分:2)

您不应在运行时修改应用Info.plist文件(或应用包中的任何内容)。这是不好的做法,也会破坏您的捆绑代码签名(这将导致无法再启动应用程序!)。

如果您想存储设置,请查看NSUserDefaults

答案 2 :(得分:1)

这是不可能的。

默认情况下,AppName-Info.plist不会复制到构建的Copy Bundle Resources阶段的包中。

因此,如果你想要一个可以写入选项的plist,那就是在运行时在临时文件位置创建它并在那里读/写它。

This是研究如何做的好地方。