التطبيق المستند إلى مستندات الكاكاو: الإخطار لم يتلقه المراقب دائمًا

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

سؤال

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

[[NSNotificationCenter defaultCenter] postNotificationName:notifyBsplinePolyOpened object:self];

يخبرني التسجيل أنه يتم الوصول إلى هذا الخط كلما فتحت وثيقة محفوظة.

في فئة DrawView ، لدي مراقبون لإخطار النافذة وملف BSPlinePoly المفتوح:

[[NSNotificationCenter defaultCenter] addObserver:self
                                                          selector:@selector(mainWindowOpen:)
                                                          name:NSWindowDidBecomeMainNotification
                                                          object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
                                                          selector:@selector(savedBspline:)
                                                          name:notifyBsplinePolyOpened
                                                          object:nil];

- (void)        mainWindowOpen:(NSNotification*) note
{
        NSLog(@"Window opened");
        _mainWindow = [note object];
}

- (void) savedBspline:(NSNotification*) note
{
        NSLog(@"savedBspline called");
        NSLog(@"note is %@", [note name]);
}

السلوك غريب. عندما أقوم بحفظ وإغلاق النافذة الرئيسية وأعيد فتحها ، أحصل على رسالة "نافذة مفتوحة" ولكن ليس رسالة "SaveDBspline". إذا تركت نافذة رئيسية مفتوحة وفتحت جلسة تم حفظها مسبقًا ، أحصل على رسالة "نافذة مفتوحة" ورسالة "SaveDBspline".

لقد بحثت في المناقشة عبر الإنترنت ووثائق Apple DevCenter لكنني لم أر هذه المشكلة.

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

المحلول

NSNotification يعمل التسليم كما هو متوقع (على الأقل عندما لا NSNotificationQueueمتورطون). يتم تسليمها على الفور ، وليس على المواضيع الأخرى ، لا تأخير ، وليس ترشيح.

أود أن أقول ، لم يتم بعد إنشاء بعض الأشياء الخاصة بك عندما يطلق الإخطار أو قمت بخلط ترتيب التنفيذ بطريقة أخرى: أنت تقول إنك تنشر الإخطار عند القراءة من ملف محفوظ ولكنك تفتقد إلى الإخطار أثناء حفظ وإغلاق النافذة.

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

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