有没有一种直接的方法来清理xcode在构建iPhone模拟器时部署应用程序的目录?我有一个sqlite数据库,如有必要,会在启动时复制到Documents文件夹中.问题是我可能会更改我的架构,但新数据库不会被复制,因为已经存在.
理想情况下,每次构建时,它都会破坏以前的内容.这可能,还是我必须手动完成?
我使用NSUserDefaults字典来存储高分等基本信息,这样当用户关闭时,应用程序数据不会丢失.无论如何我使用:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
Run Code Online (Sandbox Code Playgroud)
存储数据.如果我希望存储一个新的高分,那么我会这样做:
[prefs setInteger:1023 forKey:@"highScore"];
[prefs synchronize]; //this is needed in case the app is closed.
Run Code Online (Sandbox Code Playgroud)
后来如果我想获得高分我会做:
[prefs integerForKey:@"highScore"];
Run Code Online (Sandbox Code Playgroud)
反正问题是,我储存很多其他的事情,因为NSUserDefaults enable你存储booleans,integers,objects等我有什么方法来执行删除所有键,以便成为NSUserDefaults的像拳头时我启动应用程序?
我正在寻找类似的东西:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs deleteAllKeysAndObjectsInTheDictionary];
Run Code Online (Sandbox Code Playgroud)
或者可能有一种获取所有键的方法,我必须遍历每个对象,但我不知道如何删除它们.
编辑:
我试过了 :
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[NSUserDefaults resetStandardUserDefaults];
[prefs synchronize];
Run Code Online (Sandbox Code Playgroud)
我仍然能够获得高分....
在开始之前,我应该告诉你,这只发生在iOS 5.1中.在最近的更新之前,这从未发生过,并且它仍然不会发生在任何其他版本上.那就是说,这是正在发生的事情.
当用户退出我的应用程序时,发生的一件事就是NSUserDefaults删除了所有内容.而不是手动删除我可能添加到用户默认值的每个键,我只是NSUserDefaults使用此SO问题中建议的方法完全删除所有键:
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
Run Code Online (Sandbox Code Playgroud)
然而,似乎发生了什么,每次我尝试创建一个UIWebView删除后NSUserDefaults,我得到一个EXC_CRASH (SIGABRT).当我打电话时发生了崩溃[[UIWebView alloc] initWithFrame:frame].奇怪吧?完全退出并重新打开应用程序可以UIWebView再次创建s.
所以,我设法找出删除默认值会导致UIWebView问题,但可以肯定的是,我添加了一个符号断点-[NSUserDefaults setObject:forKey:].
![- [NSUserDefaults setObject:forKey:]断点](https://i.stack.imgur.com/0ODbq.png)
创建UIWebView确实会触发断点.
浏览崩溃日志给出了例外原因:
-[__NSCFDictionary setObject:forKey:]: attempt to insert nil value (key: WebKitLocalStorageDatabasePathPreferenceKey)
Run Code Online (Sandbox Code Playgroud)
这是堆栈跟踪的开始:
0 CoreFoundation 0x3340688f __exceptionPreprocess + 163
1 libobjc.A.dylib 0x37bd4259 objc_exception_throw + 33
2 CoreFoundation 0x33406789 +[NSException raise:format:] + 1
3 CoreFoundation 0x334067ab +[NSException raise:format:] + 35 …Run Code Online (Sandbox Code Playgroud) 我正在本地化我的iOS应用程序,并且在模拟器中它每次都以我选择的语言正确运行.
在我的iPhone 5上进行测试时,它只会在应用首次运行时正确检测语言.每次我在设备上重新编译并运行我的应用程序时,它会检测到"en"作为语言,即使我选择了Español("es")进行测试.
我使用以下方法检测语言:
[[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]
我也用过:
[[NSLocale preferredLanguages] objectAtIndex:0]
结果相同.
如果我在第一次运行后终止应用程序,并在设备上重新启动它,它会继续正确检测语言.
但是如果我杀死应用程序然后在初始运行后通过Xcode重新编译/重新启动,它将加载"en"(英语)而不是检测到.
之后,杀死并重新启动应用程序会持续检测为英语,除非我完全删除应用程序,并通过Xcode重新编译/重新安装/运行应用程序.然后循环重复...后续重建/重启而不首先从设备中删除应用程序导致错误检测.
我的设备上的所有其他应用程序一直显示西班牙语.整个UI以西班牙语显示.
更新:我现在已经在运行iOS 6的iPad(第3代)上进行了测试,并且遇到了相同的行为.
更新2:
在didFinishLaunchingWithOptions中,我有这个代码来检测语言:(语言是NSString*):
language = [[NSLocale preferredLanguages] objectAtIndex:0];
接下来是这个调试语句,比较我得到的值,以及稍微不同的检测方式,仅用于调试:
NSLog(@"Detected language: %@ / %@", language, [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]);
当应用程序在西班牙语模式下正常工作时,输出显示为"检测到的语言:es/es",然后显示为"检测到的语言:en/en".仍然不知道为什么它决定加载为英语有时......
更新4:我感谢大家的答案,我尝试了各种建议.不幸的是,我无法奖励+100赏金,因为没有任何建议似乎解决了这个问题.如果某人确实找到了适合我的解决方案,那么我将在那时再向他们奖励+50赏金.
更新5:我已经从Xcode 4.5更新到4.5.2,并遇到了同样的问题.
更新6:我现在已经从头开始创建了一个新的测试项目,它工作得很好!显然,我的项目布局方式或者可能是其中一个数据文件中的某些内容必定是错误的.我想我的下一个旅程将是从头开始重新创建项目,逐个复制文件数据......
更新7(稍后):可悲的是,在通过精心重建我的项目暂时解决(看似)之后,我再次面临这个问题.在第一次加载时,语言被正确呈现,但在后续加载时,它将恢复为英语.
已解决请参阅下面的最终解决方案.感谢大家的帮助.我可能会拿出一些赏金,因为无论如何它都会浪费掉.
好的,所以我之前遇到过这个问题并且在不知不觉中解决了它,现在又重新出现了!
"error:
Error Domain=ALAssetsLibraryErrorDomain Code=-3312 "Global denied access" UserInfo=0x169aa0
{NSLocalizedFailureReason=The user has denied all applications access to their media.,
NSLocalizedRecoverySuggestion=This setting can be changed in Preferences.,
NSLocalizedDescription=Global denied access}"
Run Code Online (Sandbox Code Playgroud)
请注意://我在模拟器中没有遇到这个问题 - 我的迭代资产代码在模拟器上完美运行.
当然,这是一个简单的解决方案,但如果我能在任何有助于帮助的"偏好"下找到任何内容,那就该死了.
请停下来!
我正在开发一款为Mountain Lion开发的Mac OS X应用程序.该应用程序在第一次运行时执行一些设置任务.然后它设置一个标志[NSUserDefaults standardUserDefaults]; 在后续运行中,应用程序检查是否设置了该标志,如果已设置,则不执行这些首次设置任务.
在Mountain Lion上,我能够删除〜/ Library/Preferences/bundleid.plist文件,以消除应用程序存储在NSUserDefaults中的所有内容.但是,在最新版本的Mac OS X上,当应用程序运行时,它甚至都没有创建该文件.我通过检查[[NSUserDefaults standardUserDefaults] objectForKey:@"foo"]调试器中返回的值来验证它是否成功地将数据保存到NSUserDefaults .
有人能指出我关于如何删除存储在NSUserDefaults中的应用程序设置的正确方向吗?
我理解清除NSUserDefaults.
但是,如何以编程方式清除文件系统和旧资源?
我想以编程方式清除iPhone上的二级缓存,但是我应该指定哪些目录?我认为NSDocumentDirectory已经足够了(存储旧的Core Data SQLite文件的地方),但还有其他吗?
我在我的应用程序中使用NSUserDefaults很多时间来存储一些值,但在"刷新按钮"我想清除所有存储的值,有没有办法清除所有NSUserDefaults值?
我尝试使用-resetStandardUserDefaults,我尝试删除plist文件,没有一个真正做我需要的.我想完全重置我的首选项,就好像重新安装了应用程序一样.有一个很好的解决方案吗?
我试过了 :
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
Run Code Online (Sandbox Code Playgroud)
但Xcode抱怨道.显然,它不喜欢plist文件已经消失.这是Xcode的错误:

objective-c ×6
ios ×5
iphone ×4
cocoa ×2
cocoa-touch ×1
localization ×1
macos ×1
media ×1
reset ×1
swift ×1
uiwebview ×1
xcode ×1
xcode4 ×1