- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
更新 1:当 iOS 的数据保护(即密码锁定)关闭时不会出现问题!
更新 2:禁用 ARC 时不会出现问题。
更新 3:在重新启动 iOS 之前杀死应用程序时不会发生问题。
我的 Settings 类使用 +initialize 实现了单例模式(加上代码以查看发生了什么):
@implementation Settings
static Settings* sharedSettings;
static NSUserDefaults* userDefaults;
+ (void)initialize
{
if ([Settings class] == self)
{
sharedSettings = [self new];
userDefaults = [NSUserDefaults standardUserDefaults];
// Code to see what's going on here ...
if (userDefaults == nil)
{
[[[UIAlertView alloc] initWithTitle:@"userDefaults == nil"
message:nil
delegate:nil
cancelButtonTitle:@"Close"
otherButtonTitles:nil] show];
}
else
{
if ([userDefaults objectForKey:@"Hello"] == nil)
{
[[[UIAlertView alloc] initWithTitle:@"Hello == nil"
message:nil
delegate:nil
cancelButtonTitle:@"Close"
otherButtonTitles:nil] show];
}
else if ([userDefaults boolForKey:@"Hello"] == NO)
{
[[[UIAlertView alloc] initWithTitle:@"Hello == NO"
message:nil
delegate:nil
cancelButtonTitle:@"Close"
otherButtonTitles:nil] show];
}
[userDefaults setBool:YES forKey:@"Hello"];
if ([userDefaults synchronize] == NO)
{
[[[UIAlertView alloc] initWithTitle:@"synchronize == NO"
message:nil
delegate:nil
cancelButtonTitle:@"Close"
otherButtonTitles:nil] show];
}
}
}
}
+ (id)allocWithZone:(NSZone*)zone
{
if (sharedSettings && [Settings class] == self)
{
[NSException raise:NSGenericException format:@"Duplicate Settings singleton creation"];
}
return [super allocWithZone:zone];
}
+ (Settings*)sharedSettings
{
return sharedSettings;
}
@end
#import "AppDelegate.h"
#import "Settings.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
[Settings sharedSettings];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self.window makeKeyAndVisible];
return YES;
}
@end
最佳答案
在 +initialize
期间不应引用其他类.没有关于它何时运行以及当时存在哪些其他类的 promise 。 +initialize
应该只做内部对类(class)的工作。
自添加 GCD 以来,这种单例模式已被取代。您应该出于各种原因使用 GCD 模式,其中之一是它在您认为它运行时运行。
How do I implement an Objective-C singleton that is compatible with ARC?
作为说明,我很好奇你的main.mm
.制作顶级 ObjC++ 几乎总是一个坏主意,并且可能导致一些令人惊讶的副作用。 (ObjC++ 是一种古怪的胶水语言,具有许多奇怪的行为。您应该在尽可能少的类中使用它。)我个人会看看是否将其改回 .m
解决了这个问题,虽然我仍然推荐 GCD-Singleton 而不是使用 +initialize
.
关于iphone - 数据保护开启 : standardUserdefaults corrupted after iOS restart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15450072/
swift 2Xcode 7.3 我尝试存储这个: var someArray = [Class1(id: 1, title: "Titel 2", Something: Class2(somevar
我有一个概念性问题 - 访问 NSUserDefaults 时是否始终必须使用 standardUserDefaults API? 我在我的应用程序中保存了很多设置/标志/NSCoding 信息,用于
一个新手问题——我正在使用 [NSUserDefaults standardUserDefaults] 来存储用户 指定的偏好。在测试我的应用程序时,我看到存储的首选项 如果我在我的 iPhone 上
我使用 [NSUserDefaults standardUserDefaults] 来存储应用程序设置。 我的问题是: 删除应用后这些设置会被删除吗? 应用程序更新后(通过应用商店)? 因为我使用它来
我有两个关于 Apple 的 +[NSUserDefaults standardUserDefaults] 的问题: 1) 该对象是否代表所有应用程序共享的首选项? 2)如果没有,并且它仅对当前应用程
如果我下载了新版本的应用程序,是否会清除存储在NSUserDefaults.standardUserDefaults()中的所有数据?如果我重复安装和删除我的应用程序会怎样? 我从应用程序商店下载了我
我想保存一些用户偏好,但是 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 只返回nil。 iOS-Developp
所以我使用 NSUserDefaults 来存储我的 FBAccessTokenKey 和 FBExpirationDateKey。我正在创建一个单例用户对象: - (id)init { se
我面临着 NSUserDefaults 的一个非常奇怪的行为,问题是 [NSUserDefaults standardUserDefaults] 对象被随机删除! 我的 [NSUserDefaults
我在开发人员门户中将应用程序组添加到我的应用程序 ID,并在我的配置文件中使用该应用程序 ID。我在 Xcode 中的产品标识符设置为该应用程序 ID。 在我的应用委托(delegate)中,我从 d
你们愿意帮帮我吗?我找到了如何保存和检索简单对象以将它们用作应用程序设置。 NSUserDefaults.StandardUserDefaults.SetString("testUser","user
我对 NSUserDefaults 的 standardUserDefaults 有疑问。standardUserDefaults 方法到底做了什么?是在初始化对象吗? 最佳答案 是或否。 NSUse
我希望有某种方法将用户默认值备份为属性列表或 XML,或其他可以通过网络传输的适当文件格式。我怎样才能获得这些的备份,以便我可以将它们发送到网络服务器并将它们检索回设备并将它们读入用户默认数据库? 最
我有一个从 NSUserDefaults.standardUserDefaults() 变成值的变量 var GiftCount = NSUserDefaults.standardUserDefaul
我想检查 NSUserDefaults 是否有 dic 键的值,如果存在则加载数据并保存到 loadedDic 中,或者设置值loadedDic 并保存到 NSUserDefaults(如果没有)。
我正在尝试使用 NSUserDefaults.standardUserDefaults().setObject(, forKey:) 保留数组的应用程序 我正在努力实现以下目标,但由于我是一个新手,所
我有一个使用 Microsoft 的 Xamarin 开发的 iOS 应用程序,这就是为什么其中一些代码看起来可能有所不同的原因。无论如何,这就是我要做的: 在我的应用程序中,我有一组默认用户设置,无
检查 standardUserDefaults 内容的正确方法是什么? 如果我打印出存储在 key 中的内容,我会得到: NSLog(@"logged_in_status : %@", [standa
在 iPhone 上运行应用程序时(例如,当您可以通过另一种方式测试某些 GPS 或相机功能时),我在哪里可以找到并检查 NSUserDefaults 创建的文件以保存 standardUserDef
我正在更改 iPhone 应用程序中的应用程序设置。 奇怪的是,我必须使用 StandardUserDefaults 执行 2 个同步命令,才能使我的更改反射(reflect)在应用设置中。 其次,当
我是一名优秀的程序员,十分优秀!