使用NotificationCenter在swift 3中添加Observer

时间:2016-11-01 21:39:58

标签: ios swift swift3 notificationcenter

我知道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'的成员”

请帮忙!

2 个答案:

答案 0 :(得分:4)

首先,这一行是错误的:

let notificationName = Notification.Name("applicationWillResignActive")

拥有Notification.Name的重点是您使用现有的常量,即.UIApplicationWillResignActive

其次,你的整个表达Persistence.applicationWillResignActive(...)是无稽之谈。对于#selector,这不是how you form a function reference。此函数是self的一部分,因此只需使用纯函数和简单函数。

所以,就像这样:

NotificationCenter.default.addObserver(self, 
    selector: #selector(applicationWillResignActive), 
    name: .UIApplicationWillResignActive, 
    object: nil)

答案 1 :(得分:-2)

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

NSNotification.Name.UIApplicationWillResignActive

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

另一件事是你的选择器不正确,请尝试以下方法:

#selector(ViewController.applicationWillResignActive(notification:))