存储在 plist 中的数据在模拟器中有效,但在设备中无效

Posted

技术标签:

【中文标题】存储在 plist 中的数据在模拟器中有效,但在设备中无效【英文标题】:Data storing in plist works in simulaor but not in device 【发布时间】:2010-04-12 16:48:05 【问题描述】:

我是 iPhone 开发的新手。我已经创建了 plist,例如我以前的 post。它在模拟器中运行良好,但在设备中运行良好。

我正在从 plist 中获取保存的值并检查条件。当我使用模拟器时,它可以工作,但不能在设备中。

【问题讨论】:

需要更多信息。 plist 在哪里?在 Xcode 中作为资源添加?使用 writeToFile 创建?另外,“它不起作用”是什么意思? 这可以关闭,因为寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及重现所需的最短代码它在问题本身。没有明确问题陈述的问题对其他读者没有用处。 【参考方案1】:

(1) 您不能写入 iPhone 资源文件夹中的文件。它是手机安全系统的一部分,可防止恶意代码在安装后更改应用程序。

(2) 如果要将新数据保存到文件中,则需要将文件写入自动生成的文件夹之一。每当在设备或模拟器上安装 iPhone 应用程序时,系统都会创建一组默认文件夹。

(3) 您想写入 Preferences 文件夹或 Documents 文件夹。如果数据涉及应用程序的操作,请将其写入首选项。如果它包含用户数据写入文档。

偏好:

NSArray *sysPaths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask, YES); 
NSString *prefsDirectory = [[sysPaths objectAtIndex:0] stringByAppendingPathComponent:@"/Preferences"];

文件:

NSArray *sysPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory ,NSUserDomainMask, YES); 
NSString *docsDirectory = [sysPaths objectAtIndex:0];

假设您要读取默认的首选项 plist 文件,进行一些更改,然后将其保存到首选项文件夹。

NSString *plistPath=[[NSBundle mainBundle] pathForResource:@"PlistFileName" ofType:@"plist"];
NSMutableArray *defaultPrefs=[[NSMutableArray alloc] initWithContentsOfFile:plistPath];
//... modify defaultPrefs
NSString *outputFilePath=[prefsDirectory stringByAppendingPathComponent:@"alteredPrefs.plist"];
[defaultPrefs writeToFile:outputFilePath atomically:NO];

【讨论】:

我得先找到死灵法师。这个帖子有六年了。 ;-) 是时候进行一些维护了。 感谢您抽出宝贵时间解决此问题!

以上是关于存储在 plist 中的数据在模拟器中有效,但在设备中无效的主要内容,如果未能解决你的问题,请参考以下文章

iPad 启动图像在 sim 中有效,但在设备上无效

使用 AVAudioPlayer 播放的音频在 iPhone 模拟器中有效,但在设备中无效

Swift 中的 AudioToolBox - 声音在模拟器中有效,但在我的 iPad 上无效

无法在 Xcode 4.3.2 的 ios 模拟器中找到数据库位置和 Plist 位置

搜索核心数据与 Plist

Flutter Web 不显示 Firebase 存储中的 NetworkImages,但在 android 模拟器上完美运行