كيفية إنشاء فئة لإرسال واستقبال الأحداث من خلال nsnotificalcenter في الهدف-C؟

StackOverflow https://stackoverflow.com/questions/2286347

سؤال

أحتاج إلى إنشاء فئتين ويجب أن يكون كلاهما قادرًا على إرسال واستقبال الأحداث من خلال طريقة 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() طريقة.

قد تجد هذا البرنامج التعليمي الأساسي معاون، مساعد، مفيد، فاعل خير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top