Используйте 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:))