إضافة AlertView في viewWillAppear، على iPhone
-
22-07-2019 - |
سؤال
أحاول إظهار عرض التنبيه بمجرد ظهور العرض (بدون استخدام زر).في viewcontroller.m لدي:
- (void) viewWillAppear:(BOOL)animated
{
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle: @"User Information" message: @"Hello"
delegate: self cancelButtonTitle:nil otherButtonTitles: @"Continue", nil];
[alert show];
[alert release];
}
وفي viewcontroller.h لدي:
IBOutlet UIView *alert;
لم أفعل أي شيء لملف .xib الخاص بي.
عند التشغيل على جهاز المحاكاة أحصل على ما يلي في وحدة التحكم:
2009-11-30 23:41:36.079 BatteryApp[867:20b] *** إنهاء التطبيق بسبب استثناء لم يتم اكتشافه "NSInternalInconsistencyException"، السبب:'-[UIViewController _loadViewFromNibNamed:bundle:] قام بتحميل طرف "BatteryAppViewController" ولكن لم يتم تعيين منفذ العرض."
هل هناك أي أفكار أخطأت فيها، أو هل هناك شيء يتعلق بـ xib الخاص بي؟
تحرير // أقوم بتوصيل التنبيه إلى عرض جديد في xib الخاص بي، ولم يحالفني الحظ حتى الآن
المحلول
المشكلة هي أن الحركتين الأساسيتين (واحدة لعرض العرض الحالي، وواحدة لإظهار التنبيه) تتداخلان.تحتاج إلى الفصل بين حركتي الرسوم المتحركة باتباع هذا الحل البديل:
اجعل رمز التنبيه موجودًا
viewDidAppear
, ، بدلا منviewWillAppear
يتصل
[alert performSelector:@selector(show) withObject:nil afterDelay:0.0]
.وهذا يضمن حدوث التنبيه بعد الانتهاء من الرسم المتحرك الحالي.
قد تحتاج إلى توخي الحذر بشأن إطلاق سراحك alert
تماما حتى الآن.لو كنت أنت، سيكون لدي طريقة منفصلة (على سبيل المثال.showHelloAlert)، ثم اتصل به من viewDidAppear:
- (void)viewDidAppear: (BOOL)animated {
[self performSelector:@selector(showHello) withObject:nil afterDelay:0.0f];
[super viewDidAppear:animated];
}
نصائح أخرى
ومحاولة وضع في حالة تأهب في viewDidAppear.
وأيضا، ما هو iboutlet عنه؟ محاولة أخذ كل شيء خارج.
وفتح ملف xib بك في واجهة البناء، ومراقبة السحب من صاحب الصورة (التي ينبغي أن تكون BatteryAppViewController
الفئة) إلى وجهة نظركم (وليس التنبيه) وحدد عرض من القائمة التي دفعها. ويشير السجل لم تقم بإجراء هذا الصدد منفذ.
وأنت لا تتصل UIAlerts حتى في واجهة البناء. التنبيهات لم يكن لديك المناقير للتخصيص بحيث لا يمكن تحميلها في واجهة البناء. تحتاج إلى إزالة:
IBOutlet UIView *alert;
... تماما.
وتقول الرسالة الخطأ التي لديك أي رأي محددة للتحكم وجهة نظركم. تحتاج إلى إعداد ذلك في واجهة البناء.