10

プロトコルとデリゲートを使用してこれを行うことができましたが、NSNotification で試してみたいと思います

私の仕事は、あるNSMutableArrayビューから別のビューに通知を送信することです。することは可能ですか

[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadData" object:myArray];

次に、レシーバーで、渡された myArray を取得するにはどうすればよいですか。私は通知オブジェクトのuserInfoとについて読んで混乱していました。object

この問題についてアドバイスをください。

4

4 に答える 4

31

Anには anNSNotificationと呼ばれるプロパティがあります。はを投稿しているです。通常、 をセットアップするときにを使用します。を使用してを渡したい場合は、次のようにします。userInfoNSDictionaryobjectNSObjectNSNotificationselfobjectNSNotificationselfNSObjectNSNotificationNSArrayNSNotification

NSArray *myArray = ....;
NSDictionary *theInfo =
  [NSDictionary dictionaryWithObjectsAndKeys:myArray,@"myArray", nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadData"
                                                    object:self
                                                  userInfo:theInfo];

そして、次を使用してそれをキャッチします。

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(doTheReload:)
                                             name:@"reloadData"
                                           object:sendingObject];

sendingObjectを送信しているオブジェクトはどこにありますかNSNotification

最後に、doTheReload:次を使用して配列をデコードします。

NSArray  *theArray = [[notification userInfo] objectForKey:@"myArray"];

それはいつも私にとってうまくいきます。幸運を!

于 2012-07-24T15:00:34.870 に答える
2

を使用する必要がありますuserInfo。通知と一緒に送信したいその他のデータ用です。object引数は、イベントが発生するオブジェクトに対するものです。たとえば、特定の MPMoviePlayerController を監視したい (他のコントローラーは監視したくない) 場合は、(object引数を介して) その通知のみにサインアップします。

于 2012-07-24T14:53:08.850 に答える
1

メソッドを使用して通知を投稿すると、オブジェクトは でobjectあり、userInfoは であるため、非常に一貫しています。userInfo-postNotificationName:object:userInfo:

はい、経由で のサブクラスを投稿できますNSObjectNSNotificationCenter

于 2012-07-24T14:52:59.000 に答える
0

スイフト 4、スイフト 5

NotificationCenter.default.post(name: Notification.Name("favoriteIsDeleted"), object: [message, self.viewModel.deleteSuccessIcon])

@objc func favoriteIsDeleted(notification: Notification) {
    guard let object = notification.object as? [String?], let message = object[0], let deleteSuccessIcon = object[1] else { return }
    // Code here ...
}
于 2020-09-01T06:05:36.923 に答える