سؤال

أحاول إظهار عرض التنبيه بمجرد ظهور العرض (بدون استخدام زر).في 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 الخاص بي، ولم يحالفني الحظ حتى الآن

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

المحلول

المشكلة هي أن الحركتين الأساسيتين (واحدة لعرض العرض الحالي، وواحدة لإظهار التنبيه) تتداخلان.تحتاج إلى الفصل بين حركتي الرسوم المتحركة باتباع هذا الحل البديل:

  1. اجعل رمز التنبيه موجودًا viewDidAppear, ، بدلا من viewWillAppear

  2. يتصل [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;

... تماما.

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

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