سؤال

هل يمكن لشخص ما أن يريني كيفية استخدام خاصية الكائن على NSNOtifcationCenter. أريد أن أكون قادرًا على استخدامه لتمرير قيمة عدد صحيح إلى طريقة المحدد الخاصة بي.

هذه هي الطريقة التي قمت بإعداد مستمع الإخطار في عرض واجهة المستخدم. رؤية كما أريد أن يتم تمرير قيمة عدد صحيح ، لست متأكدًا مما يمكنني استبداله بـ NIL.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveEvent:) name:@"myevent" object:nil];


- (void)receiveEvent:(NSNotification *)notification {
    // handle event
    NSLog(@"got event %@", notification);
}

أرسل الإشعار من فصل آخر مثل هذا. يتم تمرير الوظيفة فهرس متغير. هذه القيمة التي أريد إطلاقها بطريقة ما مع الإخطار.

-(void) disptachFunction:(int) index
{
    int pass= (int)index;

    [[NSNotificationCenter defaultCenter] postNotificationName:@"myevent" object:pass];
    //[[NSNotificationCenter defaultCenter] postNotificationName:<#(NSString *)aName#>   object:<#(id)anObject#>
}
هل كانت مفيدة؟

المحلول

ال object تمثل المعلمة مرسل الإخطار ، وهو عادة ما يكون self.

إذا كنت ترغب في تمرير معلومات إضافية ، فأنت بحاجة إلى استخدام NSNotificationCenter طريقة postNotificationName:object:userInfo:, ، والذي يأخذ قاموس القيم التعسفي (الذي تحرر في تحديده). يجب أن تكون المحتويات فعلية NSObject الحالات ، وليس نوعًا لا يتجزأ مثل عدد صحيح ، لذلك تحتاج إلى لف قيم عدد صحيح مع NSNumber أشياء.

NSDictionary* dict = [NSDictionary dictionaryWithObject:
                         [NSNumber numberWithInt:index]
                      forKey:@"index"];

[[NSNotificationCenter defaultCenter] postNotificationName:@"myevent"
                                      object:self
                                      userInfo:dict];

نصائح أخرى

ال object الخاصية غير مناسبة لذلك. بدلا من ذلك تريد استخدام userinfo معامل:

+ (id)notificationWithName:(NSString *)aName 
                    object:(id)anObject 
                  userInfo:(NSDictionary *)userInfo

userInfo هو ، كما ترون ، nsdictionary خصيصا لإرسال المعلومات مع الإخطار.

لك dispatchFunction الطريقة بدلاً من ذلك ستكون شيئًا من هذا القبيل:

- (void) disptachFunction:(int) index {
    NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:index] forKey:@"pass"];
   [[NSNotificationCenter defaultCenter] postNotificationName:@"myevent" object:nil userInfo:userInfo];
}

لك receiveEvent الطريقة ستكون مثل هذا:

- (void)receiveEvent:(NSNotification *)notification {
    int pass = [[[notification userInfo] valueForKey:@"pass"] intValue];
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top