小编moh*_*hak的帖子

文件大小更新时,不会调用监视目录更改的DispatchSource

我编写了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不是叫,因此该文件的实际大小不会更新。如何获取要更新的文件大小?

filesystems ios swift

5
推荐指数
1
解决办法
517
查看次数

iPhone 10上的UIPopoverPresentationController与iOS 10

我正在尝试将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)

iphone uipopovercontroller ios swift

3
推荐指数
1
解决办法
7028
查看次数

条件绑定的初始化程序必须具有可选类型,而不是“[String:Any]”

谁能告诉我如何解决这个问题?我只是想接收来自说话事物的信号。

\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)

optional-parameters swift alamofire swift3

0
推荐指数
1
解决办法
4693
查看次数