【发布时间】:2019-05-26 02:51:30
【问题描述】:
我想在 Objective-C 中的 App Delegate 中检查另一个 UIView 中的 Switch 状态(是 ON 还是 OFF)。这是我的代码,但不起作用。我不知道我是否正确设置了 UIView 标头,我可以从 App Delegate 访问视图。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
PrivacyPolicy *privacyPolicy = [[PrivacyPolicy alloc]init];
if ([[privacyPolicy switchAuto] isOn])
{
//do something
}
else
{
nil;
}
我找到了这段代码,但是在 Swift 3 中,有人可以翻译成 Objective-C 吗?我认为该代码是我需要的。
if defaults.value(forKey: "switchON") != nil{
let switchON: Bool = defaults.value(forKey: "switchON") as! Bool
if switchON == true{
self.view.backgroundColor = UIColor.red()
}
else if switchON == false{
self.view.backgroundColor = UIColor.green()
}
【问题讨论】:
-
很抱歉这样说,但这在很多层面上都是错误的。首先,您正在分配和初始化一个新的 PrivacyPolicy 视图,它就是这样做的:它创建一个新视图(它创建它,但它不显示它)并查看其 switchAuto 属性的状态,但它总是返回该属性的初始化状态,我认为这不是您需要的。其次,您在 didFinishLaunchingWithOptions 方法中执行此操作,该方法仅在应用启动时触发一次。你想达到什么目标,具体是什么时候?你确定你应该在 AppDelegate 中这样做吗?
-
您提供的 swift 代码可能用于根据应用程序的 UserDefaults 中保存的值设置开关的值(我将在这里冒险假设“默认”对象被声明为 var defaults : NSUserDefaults = NSUserDefaults.standardUserDefaults())
-
在您的代码中,您正试图访问您刚刚初始化的开关。您可能会考虑将 PrivacyPolicy 设置为单例。或者,如果 PrivacyPolicy 是您在 ViewController 上添加的 UIView,try to access that ViewController first。
-
didFinishLaunchingWithOptions 用于测试目的,我想把它放在 applicationWillEnterForeground 中,我有一个检查时间的功能(是白天?还是晚上?)然后设置应用程序。一切正常,除了我无法从 AppDelegate 到达开关。
-
即使您想将其用于测试,使用 didFinishLaunchingWithOptions 也不是一个好主意:如前所述,它只会在启动时被调用一次,并且再也不会被调用
标签: objective-c xcode switch-statement