-1

我知道 NotificationCenter 已更改,并且我已使用此链接查找如何将其更改为新的实现: NotificationCenter issue on Swift 3,但我仍然无法让我的工作!我正在使用课堂教科书在课堂上做作业,到目前为止这是我的课:

//
//  ViewController.swift
//  Persistence
//
//  Created by Skyleguy on 10/31/16.
//  Copyright © 2016 Skyleguy. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet var lineFields: [UITextField]!

    override func viewDidLoad() {
        super.viewDidLoad()
        let filePath = self.dataFilePath()
        if (FileManager.default.fileExists(atPath: filePath))
        {
            let array = NSArray(contentsOfFile: filePath) as! [String]
            for i in 0 ..< array.count
            {
                lineFields[i].text = array[i]
            }
        }

        let notificationName = Notification.Name("applicationWillResignActive")
        NotificationCenter.default.addObserver(self, selector: #selector(Persistence.applicationWillResignActive(notification: NSNotification)), name: notificationName, object: nil)
        // Do any additional setup after loading the view, typically from a nib.
    }

    func applicationWillResignActive(notification: NSNotification)
    {
        let filePath = self.dataFilePath()
        let array = (self.lineFields as NSArray).value(forKey: "text") as! NSArray
        array.write(toFile: filePath, atomically: true)
    }
}

毕竟这一切我仍然得到一个错误:

“模块“持久性”没有名为“applicationWillResignActive”的成员”

请帮忙!

4

2 回答 2

5

首先,这一行是错误的:

let notificationName = Notification.Name("applicationWillResignActive")

Notification.Name 的全部意义在于您使用现有的常量,即.UIApplicationWillResignActive.

其次,你的整个表达Persistence.applicationWillResignActive(...)都是胡说八道。这不是#selector. 该函数是 的一部分self,因此只需使用简单明了的函数名即可。

所以,像这样:

NotificationCenter.default.addObserver(self, 
    selector: #selector(applicationWillResignActive), 
    name: .UIApplicationWillResignActive, 
    object: nil)
于 2016-11-01T21:51:54.710 回答
-1

您的通知名称不正确,在 Swift 3 中已更改为以下内容:

NSNotification.Name.UIApplicationWillResignActive

这将为您的观察者提供正确的名称。

另一件事是您的选择器不正确,请尝试以下操作:

#selector(ViewController.applicationWillResignActive(notification:))
于 2016-11-01T21:49:12.923 回答