我正在使用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()
答案 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。
同样在正常的应用程序代码中,你可以做同样的事情,而不会伤害你的应用程序的其余部分 - 在实际的应用程序目标中进行这些测试的情况不太常见。