2016-11-01 4 views
-2

Ich verstehe, dass das NotificationCenter geändert hat, und ich habe nachgeschlagen, wie es zu der neuen Implementierung ändern, mit diesem Link: NotificationCenter issue on Swift 3, aber ich kann immer noch nicht meins zur Arbeit! Ich bin einen Auftrag aus meiner Klasse machen die Klasse Textbuch mit und das ist meine Klasse so weit:Verwenden Sie NotificationCenter, um Observer in swift 3 hinzuzufügen

// 
// 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) 
    } 
} 

nach all dies habe ich noch eine Störung erhalte:

„Modul‚Persistence‘hat keine Mitglied namens 'applicationWillResignAktiv' "

bitte helfen!

+0

"Ich verstehe, dass die NotificationCenter geändert hat" Dann sind Sie falsch verstehen. Es hat sich überhaupt nicht verändert. – matt

Antwort

-2

Die Meldung ist falsch benannt, in Swift 3 dies wie folgt geändert hat:

NSNotification.Name.UIApplicationWillResignActive 

Das gibt Ihnen den richtigen Namen für die Beobachter.

Eine andere Sache ist Ihre Wähler falsch ist, versuchen Sie bitte folgendes:

#selector(ViewController.applicationWillResignActive(notification:)) 
+0

Beide Dinge, die Sie gesagt haben, sind falsch. Der springende Punkt ist, dass du 'Notification.Name' nicht sagen musst, weil Swift weiß, dass dies ein' Notification.Name' ist. Und Ihr '# Selektor' ist nicht mehr legal als eine Funktionsreferenz als die OP's; es scheint eher eine Funktionsdeklaration zu sein. – matt

+0

@matt Ich stimme zu, aber es ist auch nicht falsch, 'Notification.Name' zu ​​schreiben. Mit dem Selektor glaube ich, dass es '(Notification:)' enthalten muss, wie die Funktionsdeklaration besagt. – Wink

+0

Dann glauben Sie falsch, und auf jeden Fall ist das nicht, was Sie in Ihrer Antwort geschrieben haben. Was du nicht kompilieren wirst. Das ist keine Frage der Meinung oder des Glaubens. – matt

4

Zunächst einmal, diese Zeile ist falsch:

let notificationName = Notification.Name("applicationWillResignActive") 

Der ganze Sinn der mit Notification.Name, dass Sie ist Verwenden Sie die vorhandene Konstante , die .UIApplicationWillResignActive ist.

Zweitens ist Ihr ganzes Ausdruck Persistence.applicationWillResignActive(...) Unsinn. Das ist nicht how you form a function reference für #selector. Diese Funktion ist Teil von self, verwenden Sie einfach den Funktionsnamen rein und einfach.

So, wie folgt aus:

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