gpt4 book ai didi

macos - NSTimer 在窗口关闭后启动、停止和继续

转载 作者:行者123 更新时间:2023-11-28 13:13:55 25 4
gpt4 key购买 nike

这就是人类逻辑中正在发生的事情(但不应该是)。

  1. 加载我的 View Controller
  2. 成功从 Parse 中检索我的图像
  3. 将第一个检索到的图像设置为我的 UIImageView 图像
  4. 启动我的 5 秒计时器(我认为)
  5. 然后它什么都不做,只停留在第一张图片上
  6. 一旦关闭窗口(由以前的 View Controller 以模态方式呈现),我就会在控制台中看到我的 println() 输出并且我的计时器开始工作。

目标:在我的 UIImageView 中显示一张图片 5 秒左右,然后显示下一张图片 (imageArray)。

是我的计时器导致了这个功能暂停,还是与我的代码安排方式有关?非常感谢所有建议/帮助,因为这是一个非常令人沮丧的问题。

这是 Swift 语言,但我可以阅读 Objective-C。

这是我的类(class)代码:

//
// ImageDisplayViewController.swift
//
//
// Created by on 5/3/15.
//
//

import Cocoa
import ParseOSX

class ImageDisplayViewController: NSViewController {


@IBOutlet weak var imageView: NSImageView!

var venue: String!
var imageArray = [(Int, NSImage)]()
var image: NSImage!
var timeToDisplay: Int = 0

var timer = NSTimer()

override func viewDidLoad() {
super.viewDidLoad()

venue = "Bees"
loadImages()


}

var k: Int = 0

func presentNextImage() {
if(k<imageArray.count) {
imageView.image = imageArray[k].1
timer = NSTimer.scheduledTimerWithTimeInterval(5.0, target: self, selector: Selector("presentNextImage"), userInfo: nil, repeats: false)
println(timer.timeInterval)
//imageView.image = imageArray[k].1
println("k is \(k)")
k++
println("Just set a new imageView.image")
} else {
println("K is n longer <imageArray.count")
}
}



func loadImages() {
var query = PFQuery(className:groupz)
query.whereKeyExists("imageFile")
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in

if error == nil {
println("Successfully retrieved \(objects!.count) objects.")
// Do something with the found objects
if let objects = objects as? [PFObject] {
for object in objects {
let thumbNail = object["imageFile"] as! PFFile
self.image = NSImage(data: thumbNail.getData()!)
let time: AnyObject? = object["displayTime"]
self.timeToDisplay = time!.integerValue

let tempTuple = (self.timeToDisplay, self.image!)
self.imageArray.append(tempTuple)

}
}
println("imageArray.count is: \(self.imageArray.count)")
self.presentNextImage()
} else {
// Log details of the failure
println("Error: \(error!) \(error!.userInfo!)")
}
}
}

最佳答案

将您的 NSTimer 声明为 weak。来自Apple docsNSTimer 上:

Note in particular that run loops maintain strong references to their timers, so you don’t have to maintain your own strong reference to a timer after you have added it to a run loop.

此外,您实际上不需要维护对计时器的引用,因为您没有在选择器参数中调用的方法之外调用 invalidate,在您的情况下,恰好是分配定时器的方法。

在您的情况下,保持对计时器的弱引用并使其无效以将其从 viewWillDisappear: 中的运行循环中移除。

Timer Programming Topics - Cocoa concept

关于macos - NSTimer 在窗口关闭后启动、停止和继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30064368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com