كيفية استخدام خاصية كائن NSNOtificeCenter
-
29-09-2019 - |
سؤال
هل يمكن لشخص ما أن يريني كيفية استخدام خاصية الكائن على 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];
}