سؤال

في تطبيق iPad الخاص بي ، في فصل واحد أسجل للحصول على إشعار:

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc addObserver:self selector:@selector(selectedList:) name:@"TTSelectedList" object:nil];

لي selectedList: الطريقة تبدو هكذا:

- (void)selectedList:(NSNotification*)notification
{
    NSLog(@"received notification");
}

ثم في فصل آخر (أ UITableViewController) أنشر هذا الإخطار عند تحديد صف:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"posting notification");
    [[NSNotificationCenter defaultCenter] postNotificationName:@"TTSelectedList" object:nil];
}

يمكنني أن أؤكد أن الإشعار يتم نشره ، لأنه يتم تسجيل "نشر الإخطار" إلى وحدة التحكم ، ولكن لا يتم استدعاء "الإخطار المستلم" ، مما يعني أنه لم يتم استلام الإشعار ولم يتم استدعاء المحدد. لا يمكنني معرفة سبب هذا.

شكرًا

هل كانت مفيدة؟

المحلول

السبب الأكثر ترجيحًا هو أنك لا تتصل فعليًا addObserver:selector:name:object:. ليس لديك خط تسجيل هناك ؛ هل أنت متأكد من أن الرمز يعمل؟

السبب الثاني على الأرجح هو أنك تتصل removeObserver: قبل نشر الإخطار. هذا هو الأكثر شيوعا في dealloc (التي ينبغي دائماً مكالمة removeObserver إذا كنت قد لاحظت أي شيء من قبل). الخطأ هنا هو أن كائنك المراقب قد تم تعامله قبل الإخطار.

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