我编写了UITableViewController的子类,该子类列出了一组目录中的文件以及它们各自的大小。当这些目录中有任何更改时,它也会自动更新。该类用于DispatchSource“监视”目录。这是执行此操作的代码:
for dir in directories {
let fd = dir.withUnsafeFileSystemRepresentation { (filenamePointer) -> Int32 in
// vfw_open is a wrapper function for open()
return vfw_open(filenamePointer, O_EVTONLY)
}
guard fd != 0 else {
return
}
let watcher = DispatchSource.makeFileSystemObjectSource(fileDescriptor: fd,
eventMask: DispatchSource.FileSystemEvent.write,
queue: DispatchQueue.global(qos: .utility))
watcher.setEventHandler { [weak self] in
DispatchQueue.main.async {
self?.updateFileList()
}
}
watcher.setCancelHandler() {
close(fd)
}
watcher.resume()
}
Run Code Online (Sandbox Code Playgroud)
这段代码基本上将观察者添加到每个目录中,并updateFileList在观察到更改时进行调用。它运行完美,并且我的文件列表几乎随时随地更新。问题是,当我将大文件复制到目录时,updateFileList立即被调用。因此,我的控制器将新文件的大小显示为0字节。但之后该文件被完全复制,updateFileList是不是叫,因此该文件的实际大小不会更新。如何获取要更新的文件大小?
我正在尝试将ViewController显示为iPhone上的弹出窗口.我已经在SO和其他网络上找到了几个答案,但到目前为止还没有.我写了一个简单的应用程序来测试它.
ViewController.swift:
import UIKit
class ViewController: UIViewController, UIPopoverPresentationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(clicked(_:)))
}
func clicked(_ sender: Any) {
let vc = UIViewController()
vc.view.backgroundColor = UIColor.blue
vc.preferredContentSize = CGSize(width: 200, height: 200)
vc.modalPresentationStyle = .popover
present(vc, animated: true, completion: nil)
let ppc = vc.popoverPresentationController
ppc?.permittedArrowDirections = .any
ppc?.delegate = self
ppc?.barButtonItem = navigationItem.rightBarButtonItem
}
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
return .none
}
func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> …Run Code Online (Sandbox Code Playgroud) 谁能告诉我如何解决这个问题?我只是想接收来自说话事物的信号。
\n\n `self.title = "Home"\n print("Requesting data...")\n Alamofire.request( "https://api.thingspeak.com/channels/290427/feeds.json", parameters: ["results": "1", "location": "false"]) // Gets the latest info from ThingSpeak\n .responseJSON { response in\n\n print("Data downloaded: \\(response.result)")\n if let json = response.result.value as! [String:Any] {\n print(json) //see full data\n\n if let feeds = json["feeds"] as? [String: Any] {\n\n for feed in feeds {\n print(feed["field2"])\n if let temperatureStr = feed["field2"] as? String, let dateStr = feed["created_at"] as? String {\n if let temperature = Double(temperatureStr){\n self.label.text = "Temperature: \\(temperature)\xc2\xb0F" //Displays last …Run Code Online (Sandbox Code Playgroud)