- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我最近开始学习 Swift 编程语言,我喜欢它。为了帮助我学习,我一直在使用 XCode 7 开发几个简单的应用程序。其中一个应用程序是手电筒,其中一个功能是频闪灯。我决定使用 NSTimer 类来安排在设定的时间间隔调用手电筒切换功能,从而提供不错的频闪效果。我第一次破解定时器代码如下:-
NSTimer.scheduledTimerWithTimeInterval(0.5, target: self.torch, selector: "toggleTorch:", userInfo: false, repeats: true)
正如您在此处看到的,我使用自己定制的 Torch 对象来处理闪光灯切换功能。我将指定为实例变量的 torch 对象作为目标参数传递,然后在 Torch 类中调用以下函数,我将其作为选择器传递:-
func toggleTorch(adjustingBrightness: Bool) -> Bool {
let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
defer {
device.unlockForConfiguration()
}
guard device.hasTorch else {
return false
}
do {
try device.lockForConfiguration()
if !adjustingBrightness && device.torchMode == AVCaptureTorchMode.On {
device.torchMode = AVCaptureTorchMode.Off
}
else if !adjustingBrightness && device.torchMode == AVCaptureTorchMode.Off {
try device.setTorchModeOnWithLevel(brightnessLevel)
}
else if adjustingBrightness && device.torchMode == AVCaptureTorchMode.On {
try device.setTorchModeOnWithLevel(brightnessLevel)
}
} catch {
return false
}
return true
}
我遇到的问题是,当计时器调用 toggleTorch
方法时,它将 true
的值作为参数传递,即使我已经专门传递了 false
到计时器作为 userInfo
参数。
所以我挠头想“啊”让我们尝试在选择器/方法参数中使用默认值 false
并在计时器 中传递
参数。这样我就可以依赖每次调用的 nil
userInfofalse
默认值。所以我的新选择器签名如下所示:-
func toggleTorch(adjustingBrightness: Bool = false) -> Bool
现在调用它的计时器已更改为:-
NSTimer.scheduledTimerWithTimeInterval(0.5, target: self.torch, selector: "toggleTorch:", userInfo: nil, repeats: true)
然而,尽管有默认参数并且没有参数通过计时器传递,传递的值仍然是 true
。因此,我进行了更多修改,并决定看看使用我的 ViewController 作为目标对象是否会有所作为。我像这样在我的 ViewController 中放置了一个新的选择器:-
func toggleTorch() {
torch.toggleTorch(false)
}
然后我更新我的计时器以在 ViewController 中调用这个新方法:-
NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "toggleTorch", userInfo: nil, repeats: true)
'Hey Presto' 它现在工作正常并且正在传递正确的 bool 值 false
因为我自己传递了该值。为什么会这样?有关信息,我已经学习 Swift 大约三个星期了,所以我不是专家
最佳答案
NSTimer
没有通过 userInfo
信息作为选择器的参数。它将自身作为参数传递,以便您知道调用了哪个计时器。
你应该设置如下:
NSTimer.scheduledTimerWithTimeInterval(0.5, target: self.torch, selector: "strobeTimerFired:", userInfo: nil, repeats: true)
在你的 Torch 对象中有一个方法如下:
func strobeTimerFired(timer: NSTimer) {
toggleTorch(false)
}
在这种情况下,您不需要访问 strobeTimerFired
中的计时器对象方法,但最好还是包含它(可以跳过)。例如,您可以添加额外的检查以确保触发该方法的计时器符合您的预期。
如果您确实需要使用 userInfo
对于某些东西,(在这种情况下不要认为你需要它),你可以在原始 scheduledTimerWithTimeInterval
中传递一个对象称为 userInfo
参数,然后您将在 strobeTimerFired
中访问它通过访问方法:timer.userInfo
.
关于ios - Swift - NSTimer 为 userInfo 参数传递了错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34559331/
我正在学习 java,并研究了来自 sun.com 的以下示例。 import java.io.*; import java.util.*; public class UserInfo impleme
我需要根据 URI 子集来识别用户。它具有以下模式 http://userinfo@hostname:port/path。 java.net.URI implementation 表示 URI。但是,
我正在尝试使用以下 GET 访问 Office365 Azure 租户上用户的 OpenId UserInfo 端点: GET https://login.windows.net/common/ope
如何使用 org.apache.jackrabbit.api.security.user 获取 CQ5 用户信息像java或jsp中的名称和组信息。? 最佳答案 在 JSP/Java 中,您可以将您的
我正在做一个安排本地通知并保存用户信息的应用程序。这部分没问题。 但是当应用程序关闭时,如果出现 Notification 并且用户点击,则不会调用该方法,我无法处理 userInfo。 我看到有一种
使用 Swift 语言从 xCode 获取编译错误消息:“extra argument userinfo in call”。问题是如何使用定时器中的 userInfo 数据到通知中心的参数“userI
根据ASIHTTPRequest网站: If your requests are all of the same broad type, but you want to distinguish bet
实现下一个代码时: func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLA
我调用NotificationCenter的post方法时有一个方法: func processMessage(message: CocoaMQTTMessage) { Log.d("Dest
我需要使用 userInfo 填充推送通知的字段(.title 和 .body)。我什么都试过了,但我只能输入“日期”代码块。我能怎么做?谢谢。 这是我从控制台 php 发送推送通知时的输出: OUT
我正在尝试创建我的 userinfo 命令,您可以为任何用户执行此操作,并显示服务器中的语音时间和服务器中发送的消息这是我的!!userinfo 命令 const Discord = module.r
所以我一直想弄清楚为什么 userInfo 一直没有显示我想要的数据。当我打印 userInfo 时,我得到了这个: [AnyHashable("aps"): { alert = "test
我有一个来自 UILocalNotification 的 userInfo 字典。使用隐式展开时是否有一种简单的方法来获取 String 值? if let s = userInfo?["ID"] 给
我有一个返回字典的通知,很像在 objective-c 中,但我没有得到我期望的结果。 这是发布通知的方法。它实际上是返回日期选择器的结果(日期)。 @IBAction func dateOfBirt
由于 ADFS 4.0 隐式流不返回 id_token 中的自定义声明,我尝试从 userInfo 端点获取这些声明。要获取 userinfo 端点的访问 token ,必须使用资源 urn:micr
我一直在使用身份服务器快速启动应用程序,我想添加调用userinfo端点时要返回的角色信息。 public Claim[] GetUserClaims(UserServiceProxy.Dto.U
我正在我的应用程序中使用 NSManagedObjectContextObjectsDidChangeNotification 通知,我现在已经知道如何使用它了。因为我使用了下面的代码来添加观察者..
在那段代码中,我有两个 NSLog 都表示 dict 的保留计数为 1。由于如果数组中有很多对象,计时器可能会在很长一段时间内触发,我可以保留给用户信息的字典吗?因为我猜它是自动释放的,而schedu
在当前 header 中,它声明为: @property (nonatomic, readonly, strong) NSMutableDictionary *userInfo NS_AVAILABL
我正在尝试使用 NSNotification 发送一些数据,但遇到了困难。这是我的代码: // Posting Notification NSDictionary *orientationData;
我是一名优秀的程序员,十分优秀!