我可以创建一个AppDelegate实例吗?

时间:2015-11-10 08:01:52

标签: swift

我正在使用Appdelegate与一些计时器进行背景检查。我该如何触发立即检查。 我的Appdelegate中会有类似的东西:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    NSTimer.scheduledTimerWithTimeInterval(10.0, target: self, selector: "test", userInfo: nil, repeats: true)

    return true
}

func test() -> Bool {
    print("true")
    return true
}

是否可以从应用程序内的任何其他类中执行以下操作?

 AppDelegate().test()

3 个答案:

答案 0 :(得分:1)

您可以,但不能通过创建另一个AppDelegate实例,而是使用它的共享实例。

# Butterknife
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }

-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}

-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}

# OrmLite uses reflection
-keepclassmembers class com.j256.** { *; }
-keep class my.package.name.database.** { *; }
-keep class com.j256.**

#test
-repackageclasses 'qqq1'
-flattenpackagehierarchy 'qqq2'
-allowaccessmodification
-forceprocessing

尝试以上代码。

答案 1 :(得分:1)

如果您需要访问应用代理的某些方法或属性,则可以执行以下操作:

console.log(request.url);

另外,你写的代码:

if let appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate {
    // Use your app delegate instance:

    appDelegate.test()
}

......错了;这里AppDelegate.test() 是一个实例方法,因此它应该在一个实例上调用(不是类 - 注意首字母)。

答案 2 :(得分:1)

在模型单元测试中,通常不要让UIApplication类似框架类,因为它们会以不可预见的方式干扰您的测试。但是根据需要实例化UIApplicationDelegate的任意实例都没有问题:

let sut = AppDelegate()
XCTAssertTrue(sut.test(), "test failed")

它是一个委托类,因此不会通过实例化来干扰UIKit。

同样在正常的应用程序代码中,你可以做同样的事情,而不会伤害你的应用程序的其余部分 - 在实际的应用程序目标中进行这些测试的情况不太常见。