SORU
2 NİSAN 2011, CUMARTESİ


iPhone UİNavigation Sorunu - animasyon neden olabilir itme bozuk iç içe gezinti çubuğu

Aşağıdaki hataları alıyorum:

2011-04-02 14:55:23.350 AppName[42430:207] nested push animation can result in corrupted navigation bar
2011-04-02 14:55:23.352 AppName[42430:207] nested push animation can result in corrupted navigation bar
2011-04-02 14:55:23.729 AppName[42430:207] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
2011-04-02 14:55:23.729 AppName[42430:207] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.

Ben ne yapıyorum burada. Görünümü denetleyicisi, belirli bir düğmeye basıldığında aşağıdaki derim:

EventsViewController *viewController = [[EventsViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
navController.navigationBar.tintColor = [UIColor blackColor];
[self presentModalViewController:navController animated:YES];
[viewController release];
[navController release];

Eğer belirli bir düğme EventsController itti sonra, diyorum:

SingleEventViewController *viewController = [[SingleEventViewController alloc] initWithEvent:[currentEvents objectAtIndex:indexPath.row]];
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];

Eğer belirli bir düğme SingleEventViewController itti sonra, diyorum:

EventMapView* viewController = [[EventMapView alloc] initWithCoordinates];
[[self navigationController] pushViewController:viewController animated:YES];
[viewController release];

Evet, iç içe basma animasyonlar var ortada, ama bu konuda gitmek için doğru yol değil mi? Dışarı Apple'ın DrillDownSave kodu kontrol ettim ve bu böyle yapıyorlar gibi görünüyor. ViewDidLoad yöntemleri yerine init yöntemleri kullanmak bu kadar önemli?

CEVAP
19 Ocak 2013, CUMARTESİ


YANLIŞLIKLA AYNI TETİKLEYEN İKİ OLAY ARASINDA BAĞLANTI KURMAK Bir kez kod ve arayüz oluşturucu bir kez, ama aynı zamanda hem de...

Diğerleri gibi aynı hatayı alıyordum. Tek sorunum yanlışlıkla ateş aynı zaman iki kere gitmiştim. Bir kez ınterface builder, ve sonra benim kod içinde.

Bir UİTableView var. Bir hücre seçildiğinde, ınterface builder içinde bir geçiş tetikler. İşte benim sorunum, ben vardı segue kurmak için doğrudan ateş açmış tıklayarak HÜCRENİN Kendi içinde ınterface builder, o zaman benim kodu, kaldım altında didSelectRowAtİndexPath, kodu bu ateş aynı şekilde açıkladın... gibi

[self performSegueWithIdentifier:@"MySegue" sender:tableView];

Bu didSelectRowAtİndexPath bir satır seçili olduğundan çağrılan, yukarıdaki kod ile tespit yangınları anlamına gelir. Daha sonra ınterface builder, aynı zamanda segue tetikler, doğrudan arayüz oluşturucu hücre nesne ile bağlı çünkü. Doğrudan geçiş tetikleme arabirimi builder durdurmak için. Görünüm denetleyici üst segue bağlamak için, aşağı iç içe hücreden çıkıyor, içeride değil.

Bu yüzden eğer bu sorunu aynı sebepten beni, seni çağıran aynı şekilde açıkladın iki kez, bu düzeltme ile bağlantısını kesmek bağlantısından HÜCREYE DOĞRUDAN, amacın, sahip segue bağlantı kaynağı en üstünde masa hiyerarşisinde İB yerine iç içe geçmiş iç cep. Senden segue Denetleyicisi kendisi Manzarası, segue bağlanmak. Eğer bu doğru yaptıysanız, segue seçtiğinizde, gelen BÜTÜN görünümü değil, sadece hücre vurgulamak gerekir.

Şimdi Elma belgeleri Devletleri performSegueWithİdentifier altında:Gönderen: böylece referans:

Uygulamalar normalde dedirtiyor doğrudan tetikleyici gerekmez. Bunun yerine, Interface Builder görünüm kumanda, kumanda view hiyerarşisi içinde gömülü olarak, segue tetik ile ilişkili bir nesne yapılandırın. Ancak, geçiş bir program aracılığıyla tetiklemek için bu yöntemi, belki de edemiyor şeridi kaynak dosyasında belirtilen bazı eylem yanıt olarak arayabilirsiniz. Örneğin, özel bir eylem işleyicisi shake işlemek için kullanılan arayın ya da olaylar ivme olabilir.

Benim UİTableView için bir arama düğmesi var, ve segue arama sonuçları tablosu varsa, ya da normal masa görünümü varsa denir mi benim durumumda, kararlı olmak zorundaydı. Segue doğrudan tetikleyiciye ihtiyacım var.

Interface builder gömülü denetimi kaldırmak, ve bende bir görünüm denetleyicisi üzerinde sopa kendisi, daha sonra kodunuzda segue tetik!

Artık çift dedirtiyor! Ve artık hataları.

Umut olur, bana iyi bir kaç saat Bu bir mücadele aldı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Call Me Howard

    Call Me Howa

    18 AĞUSTOS 2012
  • National Geographic

    National Geo

    7 Mayıs 2006
  • TechBalance

    TechBalance

    12 HAZİRAN 2011