Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何向plist添加新键?_String_Cocoa_Key_Plist - Fatal编程技术网

String 如何向plist添加新键?

String 如何向plist添加新键?,string,cocoa,key,plist,String,Cocoa,Key,Plist,我有一个包含键和值的plist文件,我希望用户能够保存一个带值的键,以便稍后可以调用它。我有所有的回调部分编程,但我需要能够保存它。现在我有这个: - (IBAction)addKey:(id)sender { NSString *string1 = [input stringValue]; NSString *string2 = [filesField stringValue]; NSMutableDictionary *fileKeys = [[NSMutableD

我有一个包含键和值的plist文件,我希望用户能够保存一个带值的键,以便稍后可以调用它。我有所有的回调部分编程,但我需要能够保存它。现在我有这个:

- (IBAction)addKey:(id)sender {
    NSString *string1 = [input stringValue];
    NSString *string2 = [filesField stringValue];

    NSMutableDictionary *fileKeys = [[NSMutableDictionary alloc] initWithContentsOfFile:
                          [[NSBundle mainBundle] pathForResource:@"Keys" ofType:@"plist"]];
    [fileKeys setValue:string2 forKey:string1];
}

如果我做错了什么,它不会将该键及其值添加到plist。

首先,您不应该真正更新捆绑包中的plist文件;虽然它可以工作,但它会破坏应用程序上的任何签名,并且肯定会在沙箱下破坏

作为替代方案,您可以将原始plist存储在捆绑包中,并在应用程序第一次运行时将其复制到应用程序支持文件夹中


其次,您需要将修改后的词典写回文件系统,您可以使用
NSDictionary
writeToURL:atomically
writeToFile:atomically
方法执行此操作。

plist不是唯一的选项。您还可以使用核心数据来实现它,具体取决于您想要存储的内容。如果您使用CD,它会非常方便,您可以将GUI控件的外观绑定到CD中的项目。
基本上,您需要创建实体,一个用于用户,一个用于项目。这将允许您将配置保留在捆绑包中。不应该打破沙箱,但直到现在我没有任何实际经验与沙箱。

你也可以考虑存储任何你将存储在NSUserDefaults。NSUserDefaults可以在第一次创建时使用plist中的默认值初始化,因此它非常适合设置等。如果您存储的数据很大且不适合NSUserDefaults,则上述方法可能是您的最佳选择。此外,值得强调的是,您可以更改应用程序包中的文件,但你可能更可能不会。永远不要假设应用程序包中的任何内容都是可写的。感谢您的回答,我现在意识到,如果我这样做,每次我的应用程序更新时,它都会删除添加的项目,因此我甚至不会包括此功能