gpt4 book ai didi

iphone - iPhone 上的 EXC_BAD_ACCESS 与 NSUserdefaults

转载 作者:行者123 更新时间:2023-12-03 20:09:35 25 4
gpt4 key购买 nike

我的 ApplicationDelegate 中有以下代码。我的部署目标是 3.0 及更高版本,但是当我在 3.1.3 的 iPhone 上使用以下代码启动应用程序时,我得到了 EXC_BAD_ACCESS,但是在 4.2 的模拟器上它运行良好。

此问题现已解决。下面的代码正在运行,并且由于我的代码中的 NSURLConnection ,它获得了 EXC_BAD_ACCESS 。如果其他人遇到这个问题,我不会删除我的代码。感谢您的帮助。

更新:Plist文件:

<dict>
<key>StringsTable</key>
<string>Root</string>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>Check for report on start?</string>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>Autocheck reports?</string>
<key>Key</key>
<string>FAutoUpdatePrefKey</string>
<key>DefaultValue</key>
<true/>
</dict>
</array>

应用程序委托(delegate)

+ (void)initialize {

NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *pListPath = [path stringByAppendingPathComponent:@"Settings.bundle/Root.plist"];

NSDictionary *pList = [NSDictionary dictionaryWithContentsOfFile:pListPath];

NSMutableArray *prefsArray = [pList objectForKey:@"PreferenceSpecifiers"];
NSMutableDictionary *regDictionary = [NSMutableDictionary dictionary];

for (NSDictionary *dict in prefsArray) {
NSString *key = [dict objectForKey:@"Key"];
if(key) {
id value = [dict objectForKey:@"DefaultValue"];
[regDictionary setObject:value forKey:key];
}
}
[[NSUserDefaults standardUserDefaults] registerDefaults:regDictionary];
}

最佳答案

registerDefaults: 方法自 iOS 2.0 ( See Documentation ) 起就可用,因此这不应该是问题。问题可能源于 regDictionary 对象以及您如何填充它。

看看上一个问题。主要答案有一个很好的方法来完成您想要完成的任务。事实上,除了如何访问设置包之外,代码几乎相同: Can you make the settings in Settings.bundle default even if you don't open the Settings App

这是您想要的代码(直接从上面链接问题的答案中窃取 PCheese )

- (void)registerDefaultsFromSettingsBundle {
NSString *settingsBundle = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"];
if(!settingsBundle) {
NSLog(@"Could not find Settings.bundle");
return;
}

NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:@"Root.plist"]];
NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"];

NSMutableDictionary *defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]];
for(NSDictionary *prefSpecification in preferences) {
NSString *key = [prefSpecification objectForKey:@"Key"];
if(key) {
[defaultsToRegister setObject:[prefSpecification objectForKey:@"DefaultValue"] forKey:key];
}
}

[[NSUserDefaults standardUserDefaults] registerDefaults:defaultsToRegister];
[defaultsToRegister release];
}

更新:现在我看到了您的 pList,将您的 PSToggleSwitchSpecifier 的默认值从 <true/> 更改为至<string>YES</string>

关于iphone - iPhone 上的 EXC_BAD_ACCESS 与 NSUserdefaults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4587740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com