كيفية إنشاء فئة لإرسال واستقبال الأحداث من خلال nsnotificalcenter في الهدف-C؟
-
21-09-2019 - |
سؤال
أحتاج إلى إنشاء فئتين ويجب أن يكون كلاهما قادرًا على إرسال واستقبال الأحداث من خلال طريقة NSNOtificationCenter.
@implementation Class A
-(void)sendEvent
{
addObserver:--- name:---- object:---
}
-(void)ReceiveEvent
{
postNotificationName: --- object:---
}
@end
نفس الشيء ، يقول الفصل الآخر أن classb يجب أن يكون قادرًا أيضًا على إرسال واستقبال الأحداث. كيف يمكن أن تتم؟
المحلول
من الناحية المثالية ، سيبدأ كائن في مراقبة الأحداث المثيرة للاهتمام بمجرد تهيئتها. لذلك سوف يسجل جميع الأحداث المثيرة للاهتمام مع الإخطار داخل رمز التهيئة الخاص به. sendEvent:
هو في الأساس غلاف حول postNotification:
طريقة.
@implementation A
- (id)init {
if(self = [super init]) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveEvent:) name:@"SomeEvent" object:nil];
}
return self;
}
- (void)sendEvent {
[[NSNotificationCenter defaultCenter] postNotificationName:@"SomeOtherEvent" object:nil];
}
// Called whenever an event named "SomeEvent" is fired, from any object.
- (void)receiveEvent:(NSNotification *)notification {
// handle event
}
@end
نفس الشيء بالنسبة للفئة ب
تحرير 1:
قد تكون أكثر من تعقيد المشكلة. يعمل nsnotificationcenter كوسيط يتم إرسال جميع الأحداث إليه ويقرر ذلك من يجب إعادة توجيه ذلك. إنه مثل نمط المراقب لكن الكائنات لا تلاحظ أو تخطر بعضها البعض مباشرة ، بل من خلال وسيط مركزي - NSNotificationCenter في هذه الحالة. مع ذلك ، لا تحتاج إلى توصيل فئتين مباشرة قد تتفاعل مع بعضهما البعض مع #include
.
أثناء تصميم الفصول الدراسية الخاصة بك ، لا تقلق بشأن كيفية إخطار الكائن أو كيفية إخطار الكائنات المهتمة الأخرى ، فقط أن الكائن يحتاج إلى إخطار بعض الأحداث عند حدوثه ، أو يحتاج إلى إبلاغ NSNOtficEnter بأحداثه متى تحدث.
باختصار ، اكتشف جميع الأحداث التي يجب أن يعرفها كائن وتسجيل تلك الأحداث في هذا init()
الطريقة ، وإلغاء تسجيلها في dealloc()
طريقة.
قد تجد هذا البرنامج التعليمي الأساسي معاون، مساعد، مفيد، فاعل خير.