Используйте NotificationCenter, чтобы добавить Observer в Swift 3

Я понимаю, что NotificationCenter изменился, и я посмотрел, как изменить его на новую реализацию, используя эту ссылку: проблема NotificationCenter в 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 ответа

Во-первых, эта строка неверна:

let notificationName = Notification.Name("applicationWillResignActive")

Весь смысл наличия Notification.Name в том, что вы используете существующую константу, которая .UIApplicationWillResignActive,

Во-вторых, все ваше выражение Persistence.applicationWillResignActive(...) ерунда Это не то, как вы формируете ссылку на функцию для #selector, Эта функция является частью self, так что просто используйте имя функции чисто и просто.

Ну вот так:

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

Ваше уведомление имеет неправильное название, в Swift 3 оно изменилось на следующее:

NSNotification.Name.UIApplicationWillResignActive

Это даст вам правильное имя для вашего наблюдателя.

Другое дело, что ваш селектор неверен, попробуйте следующее:

#selector(ViewController.applicationWillResignActive(notification:))
Другие вопросы по тегам