[解決済み] Swift 3でのNotificationCenterの問題 [重複].
質問
私はSwift 3を学習しており、私は以下のものを使おうとしています。
NSNotificationCenter
. 以下は私のコードです。
func savePost(){
let postData = NSKeyedArchiver.archivedData(withRootObject: _loadedpost)
UserDefaults.standard().object(forKey: KEY_POST)
}
func loadPost(){
if let postData = UserDefaults.standard().object(forKey: KEY_POST) as? NSData{
if let postArray = NSKeyedUnarchiver.unarchiveObject(with: postData as Data) as? [Post]{
_loadedpost = postArray
}
}
//codeerror
NotificationCenter.default().post(NSNotification(name: "loadedPost" as NSNotification.Name, object: nil) as Notification)
}
で、これがオブザーバです。
override func viewDidLoad() {
super.viewDidLoad()
//codeerorr
NotificationCenter.default().addObserver(self, selector: Selector(("onPostLoaded")), name: "loadedPost", object: nil)
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
いつもエラー "signal SIGBRT" が出ます。オブザーバーで名前を変更しようとすると、エラーにはなりませんが、明らかに何も表示されませんでした。どうしたら直るのでしょうか?
どのように解決するのですか?
Swift 3 & 4
Swift 3、そして現在のSwift 4では、多くのquot;stringly-typed"APIが次のように置き換えられています。
struct
ラッパー型" に置き換えられました。Notification は現在
struct Notfication.Name
ではなく
String
. 詳細については、現在ではレガシーとなっている
Swift 3への移行ガイド
Swift 2.2 の使い方を説明します。
// Define identifier
let notificationIdentifier: String = "NotificationIdentifier"
// Register to receive notification
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(YourClassName.methodOfReceivedNotification(_:)), name: notificationIdentifier, object: nil)
// Post a notification
NSNotificationCenter.defaultCenter().postNotificationName(notificationIdentifier, object: nil)
Swift 3 & 4 の使い方を説明します。
// Define identifier
let notificationName = Notification.Name("NotificationIdentifier")
// Register to receive notification
NotificationCenter.default.addObserver(self, selector: #selector(YourClassName.methodOfReceivedNotification), name: notificationName, object: nil)
// Post notification
NotificationCenter.default.post(name: notificationName, object: nil)
// Stop listening notification
NotificationCenter.default.removeObserver(self, name: notificationName, object: nil)
すべてのシステム通知のタイプは、静的定数として
Notification.Name
の静的定数として定義されました。
.UIApplicationDidFinishLaunching
,
.UITextFieldTextDidChange
など。
を拡張することができます。
Notification.Name
を拡張し、システム通知との一貫性を保つために、独自のカスタム通知を作成することができます。
// Definition:
extension Notification.Name {
static let yourCustomNotificationName = Notification.Name("yourCustomNotificationName")
}
// Usage:
NotificationCenter.default.post(name: .yourCustomNotificationName, object: nil)
Swift 4.2 の使い方を説明します。
システム通知の名前がUIApplicationの一部であることを除いて、Swift 4と同じです。したがって、システム通知との一貫性を保つために、あなたは
UIApplication
を拡張して、Notification.Nameの代わりに独自のカスタム通知を使用することができます。
// Definition:
UIApplication {
public static let yourCustomNotificationName = Notification.Name("yourCustomNotificationName")
}
// Usage:
NotificationCenter.default.post(name: UIApplication.yourCustomNotificationName, object: nil)
関連
-
[解決済み] iOSのバージョンを確認する方法を教えてください。
-
[解決済み] UITableViewの下にある余分なセパレータをなくす
-
[解決済み] App Storeのアプリと連動させる方法
-
[解決済み] iOS 8 UITableViewのセパレータインセット0が機能しない件
-
[解決済み] UITextViewのマージン/パディングをなくす方法
-
[解決済み] CocoaPodsの最新バージョンにアップデートしますか?
-
[解決済み] UILabelで複数行のテキストを表示する
-
[解決済み] Swift で HTTP リクエストを行うにはどうしたらいいですか?
-
[解決済み] UITableView - トップにスクロールする
-
[解決済み] iOSアプリをApple Developer Programや脱獄せずにデバイス上でテストすることができます。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
IOS8 Development Guide Error Thread 1: signal SIGABRT
-
iOSコンパイルポッドでエラー CocoaPods could not find compatible versions for pod "XXXXX" が報告される。
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み] UITableViewの選択を無効にするにはどうすればよいですか?
-
[解決済み] Xcodeにおけるバージョンとビルドの比較
-
[解決済み] UINavigationBarの1px下の行を非表示にする方法
-
[解決済み] 「GCC使用時に「Xcode/iOSのライセンスに同意するには管理者権限が必要です。rootでsudoを使用して再実行してください。
-
[解決済み] NSNotificationCenterのaddObserver in Swift
-
[解決済み] セキュリティで保護されたWebサービスにもアクセスするiOSアプリで、Facebook認証を行うためのデザイン
-
[解決済み] swift 3.0のNotificationCenterとswift 2.0のNSNotificationCenterを使用してデータを渡すにはどうすればよいですか?