سؤال

لدي تطبيق iPhone قائم على التنقل. عندما تضغط على خلية في Tableview ، يتم دفع UiviewController جديد إلى مكدس التنقل. في وحدة التحكم في العرض هذه ، أقوم بإعداد عرض مخصص في طريقة ViewDiddload:

- (void)viewDidLoad {
    [super viewDidLoad];

    // Setup custom navigation title
    [self setTitle:@"Mediaportal"];
    navItem = [[NavigationBarTitleItemViewController alloc] initWithNibName:@"NavigationBarTitleItem" bundle:nil];
    [navItem setTitle:[theServer name]];
    [navItem setSubTitle:@""];
    [self.navigationItem setTitleView:navItem.view];

…
}

بمجرد أن أعود إلى RootViewController:

[self.navigationController popToRootViewControllerAnimated:YES];

يتعطل التطبيق مع الخطأ التالي (nszombieenabled = نعم):

*** -[CALayer retain]: message sent to deallocated instance 0x5a5fd80

من ما أستطيع أن أرى RootViewController لا يزال يحاول الوصول إلى TitleView المخصص ، والذي تم تعامله مع وحدة التحكم في العرض الثاني. بمجرد التعليق على جزء TitleView المخصص في الكود الخاص بي ، يعمل التطبيق. حاولت تعيين cilvigationItem.titleview على NIL (كما هو موضح في مستندات Apple) قبل تخصيص ViewController الثاني ، لكن هذا لا يساعد.

هل لديك تلميح ما يمكنني فعله لمنع هذا الحادث؟

شكرا مارك.

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

المحلول 2

لقد وجدت أخيرًا الحل له (حل بسيط للغاية). لا بد لي من تخصيص وبدء Navitem من خلال ممتلكاته ثم يتم الاحتفاظ بها:

self.navItem = [[NavigationBarTitleItemViewController alloc] initWithNibName:@"NavigationBarTitleItem" bundle:nil];

نصائح أخرى

كان لدي نفس الخطأ بالضبط منذ شهر أو نحو ذلك ، بالضبط نفس الموقف. لقد دفعني المكسرات.

اكتشفت أن ViewController الذي كنت أظهره أيضًا لم يتم تعامله على الإطلاق. كان لدي فئة فرعية مخصصة لـ Uibutton إضافة إلى هذا الرأي ، لكن تم تعديلها عندما تم دفع العرض الثاني. لذلك عندما ظهرت ، لم يكن Uibultton هناك.

تحقق من العرض الذي تعود إليه ، أو التأكد من عدم حصولك على أي فصول تقوم بتخصيصها ، أو تُصدر تلقائيًا دون أن تعرف ذلك.

أتمنى أن يساعدك هذا.

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