Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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
Ios 在开发时以编程方式编辑应用程序包中的plist_Ios_Objective C_Xcode_Plist - Fatal编程技术网

Ios 在开发时以编程方式编辑应用程序包中的plist

Ios 在开发时以编程方式编辑应用程序包中的plist,ios,objective-c,xcode,plist,Ios,Objective C,Xcode,Plist,我已经在XCode上创建了一个plist,其中包含一些无法手动插入的值。所以我想在开发时以编程方式添加这些值。但我似乎只能读取plist,无法保存应用程序包中的plist,这在运行时是有意义的。。当我发布我的应用程序时,我希望每个人都有这个plist文件,这就是为什么我不保存文档或缓存。如何实现我想要的?从(粘贴在下面)您可以使用在那里找到的-(NSString*)路径fromUserLibraryPath:(NSString*)inSubPath方法在用户的个人库中构建路径 例如,NSStri

我已经在XCode上创建了一个plist,其中包含一些无法手动插入的值。所以我想在开发时以编程方式添加这些值。但我似乎只能读取plist,无法保存应用程序包中的plist,这在运行时是有意义的。。当我发布我的应用程序时,我希望每个人都有这个plist文件,这就是为什么我不保存文档或缓存。如何实现我想要的?

从(粘贴在下面)您可以使用在那里找到的
-(NSString*)路径fromUserLibraryPath:(NSString*)inSubPath
方法在用户的个人库中构建路径

例如,
NSString*editedPlist=[self-pathFromUserLibraryPath:@“my.plist”]获取用户库中修改的plist的名称(即使该plist尚不存在)

你读/写它的方式取决于你拥有什么样的plist,但你可以通过以下方法将其读入字典:

NSMutableDictionary *thePlist= [[NSMutableDictionary alloc] initWithContentsOfFile:editedPlist ];
如果您无法读取,例如
[thePlist count]==0
,那么您可以调用相同的
initWithContentsOfFile:
初始值设定项,该初始值设定项具有捆绑包中模板的路径,但是您可以将plist写入
editedPlist
路径,以便它显示在用户目录中


下面是我上面提到的实用方法:

/*
    NSFileManager: Get the path within the user's Library directory
    Original Source: <http://cocoa.karelia.com/Foundation_Categories/NSFileManager__Get_.m>
    (See copyright notice at <http://cocoa.karelia.com>)
*/

/*" Return the path in the user library path of the given sub-path.  In other words, if given inSubPath is "foo", the path returned will be /Users/myUser/Library/foo
"*/
-  (NSString *) pathFromUserLibraryPath:(NSString *)inSubPath
{
    NSArray *domains = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES);
    NSString *baseDir= [domains objectAtIndex:0];
    NSString *result = [baseDir stringByAppendingPathComponent:inSubPath];
    return result;
}
/*
NSFileManager:获取用户库目录中的路径
原始资料来源:
(见版权公告,网址为)
*/
/*返回给定子路径的用户库路径中的路径。换句话说,如果给定inSubPath为“foo”,则返回的路径将为/Users/myUser/library/foo
"*/
-(NSString*)路径FromUserLibraryPath:(NSString*)inSubPath
{
NSArray*domains=NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,是);
NSString*baseDir=[domains objectAtIndex:0];
NSString*result=[baseDir stringByAppendingPathComponent:inSubPath];
返回结果;
}

我建议编写代码,在开始时检查documents目录中的plist。如果它在那里,把它读入内存

如果在documents目录中找不到该文件,请改为从应用程序包中读取它。然后从内存中放入使用它的代码,并将更改后的版本写入documents目录


请记住,从plist文件读取的所有对象都是不可变的,即使您将可变对象写入该文件中。您必须编写代码,使您想要更改的任何内容都具有可变副本。(如果你有复杂的结构,比如字典数组,而字典数组又包含字符串数组,那么你必须实现一个可变的深度副本。)

我不希望每个用户都创建这个plist文件。我想在开发时创建一次,然后将此文件与应用程序一起分发。通过在用户的个人库中创建不可能的文件,我猜..你发送的信息是混合的:)如果你想创建一次,只需在开发过程中创建它(不管你喜欢什么),并将其作为资源包含在你的应用程序中。你说@gran33中的链接没有帮助,因为它们在别处创建了plist,但是如果你只需要在开发时创建它们,那就不相关了。。。在你喜欢的地方/以你喜欢的方式创建它们,将它们包含在你的项目中,作为构建步骤,将它们复制到应用程序包中。当然。。我太傻了。我认为创建的文件不容易访问。我刚刚在我的桌面文件夹中创建了plist文件,并将其拖到XCode,就这样完成了!:)