التطبيق المستند إلى مستندات الكاكاو: الإخطار لم يتلقه المراقب دائمًا
-
01-10-2019 - |
سؤال
آمل أن يتمكن شخص ما من المساعدة في مشكلة الإخطار. لدي إشعار يبدو أنه تم إعداده بشكل صحيح ولكنه لم يتم تسليمه كما هو متوقع. أقوم بتطوير تطبيق قائم على المستند. تنشر فئة المندوب/ المستند الإشعار عندما يقرأ من ملف محفوظ:
[[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
متورطون). يتم تسليمها على الفور ، وليس على المواضيع الأخرى ، لا تأخير ، وليس ترشيح.
أود أن أقول ، لم يتم بعد إنشاء بعض الأشياء الخاصة بك عندما يطلق الإخطار أو قمت بخلط ترتيب التنفيذ بطريقة أخرى: أنت تقول إنك تنشر الإخطار عند القراءة من ملف محفوظ ولكنك تفتقد إلى الإخطار أثناء حفظ وإغلاق النافذة.
للمساعدة في تصحيح الأخطاء ، أقترح عليك إعداد مراقب للإخطار في مندوب التطبيق الذي يسجل ببساطة جميع الإخطارات. أنت متأكد من أن جميع الإخطارات يتم تسليمها كما هو متوقع.