2016-11-01 32 views
-2

NotificationCenterが変更されたことを理解していますが、このリンクを使用して新しい実装に変更する方法を調べました:NotificationCenter issue on Swift 3、しかし私はまだ仕事ができません!私はクラスのテキストブックを使用して私のクラスからの割り当てをやっているし、これはこれまでのところ、私のクラスである。このすべての後NotificationCenterを使用して迅速にObserverを追加する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

次にあなたは間違って理解し「私は通知センターが変更されたことを理解して」。それは全く変わっていない。 – matt

答えて

-2

あなたの通知が誤っスウィフト3で、これは次のように変更された、名前が付けられ:

NSNotification.Name.UIApplicationWillResignActive 

ご観測者のためのあなたの正しい名前を与えること。

もう一つは、あなたの選択が間違っている、次のことを試してくださいです。

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

あなたが言ったことはどちらも間違っています。要点は、Swiftはこれが「Notification.Name」であることを知っているので、「Notification.Name」と言う必要はありません。そして、あなたの '#selector 'はOPよりも機能参照として正当なものではありません。関数宣言のように見えます。 – matt

+0

@matt私は同意しますが、 'Notification.Name'も書き込むのは間違いではありません。セレクタでは、関数宣言には '(Notification:)'が含まれていなければならないと思います。 – Wink

+0

あなたは間違っていると信じています。どんな場合でも、あなたの答えに書いたものではありません。あなたはコンパイルできません。それは意見や信念の問題ではありません。 – matt

4

まず第一に、この行は間違っている:

let notificationName = Notification.Name("applicationWillResignActive") 

Notification.Nameを持っていることの全体のポイントは、あなたということです.UIApplicationWillResignActiveある既存の定数を、使用しています。

第2に、あなたの全体表現Persistence.applicationWillResignActive(...)はナンセンスです。 #selectorの場合はhow you form a function referenceではありません。この関数はselfの一部なので、純粋で単純な関数名を使用してください。このようなので、

、:

NotificationCenter.default.addObserver(self, 
    selector: #selector(applicationWillResignActive), 
    name: .UIApplicationWillResignActive, 
    object: nil) 
関連する問題