我知道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'的成员”
请帮忙!
答案 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:))