SORU
31 EKİM 2008, Cuma


Ayrı temsilci kullanırken UİTableView sorunu/kaynağı

Genel Açıklama:

İşleri ne ile başlamak için, böyle büyük mükafat tarafından oluşturulan bir görünüm üzerine yerleştirilen UITableView Interface Builder kullanarak var. Görünümün Dosya Sahibi UIViewController Güncellemelerinden tarafından oluşturulan bir alt kümesidir. Bu alt sınıf var eklenen çalışma uygulamaları numberOfSectionsInTableView: tableView:numberOfRowsInSection: tableView:cellForRowAtIndexPath: ve Tablo Görünümü dataSource delegate bağlı olan bu sınıf üzerinden Dosya Sahibi Interface Builder.

Yukarıdaki yapılandırma herhangi bir sorun ile çalışır. Bu sorun oluştuğunda istiyorum taşımak bu Tablo manzara dataSource delegate-uygulamaları için ayrı bir sınıf, büyük ihtimalle çünkü diğer kontrolleri üzerinde Görünümü dışında Tablosunu görmek istiyorum hareket Tablosu Görünümü ile ilgili kod için kendi sınıf. Bunu yapmak için, aşağıdakileri deneyin:

  • Böyle büyük mükafat UITableViewController yeni bir alt sınıf oluşturun
  • Yeni alt numberOfSectionsInTableView:, tableView:numberOfRowsInSection: tableView:cellForRowAtIndexPath: bilinen-iyi uygulamaları taşıyın
  • En üst seviyeye UITableViewController sürüklemevcutInterfacebuilder'ı içinde XİB, sil otomatik olarak oluşturulan 18*/UITableView *bunun için UITableViewController UITableViewControlleryeni alt maç için's sınıfı
  • Daha önce işçi çıkarmak**22'dataSource delegate s bağlantıları mevcut ve UITableViewController yeni bağlayın

Tamamlandığında, UITableView bir çalışma yok. Yukarı görünüşte rastgele meydana gelebilecek üç sonuçtan biri ile bitiriyorum:

  • UITableView yüklediğinde, çalışma zamanı bir hata tanımıyor hangi bir nesneye tableView:cellForRowAtIndexPath: gönderiyorum belirten alıyorum
  • UITableView yüklediğinde, proje hata ayıklayıcıya keser
  • Hata yok, ama UITableView görünmüyor

Bazı hata ayıklama ve temel bir proje sadece bu sorunu yeniden oluşturmak için oluşturulan sahip, genellikle 3. yukarıda (hiçbir hata ama görünür bir tablo görünümü) seçeneğini görüyorum. Bazı NSLog aramalar ekledim ve numberOfSectionsInTableView: numberOfRowsInSection:, cellForRowAtIndexPath: "değil," ikimiz birden halde bulundu. Çok basit bir şey eksik ben ikna oldum ve cevabını benden çok daha fazla tecrübesi olan biri için fark edilmesi umuyordu. Eğer bu kolay bir cevap olabilir değil mi eğer bazı kod veya örnek bir proje ile güncelleme için mutlu olurdu. Zaman ayırdığınız için teşekkürler!

Tam adımlar için oluşturma:

  • Yeni iPhone OS oluşturun Tabanlı bir Görünüm Güncellemelerinden Uygulama ve TableTest Ara
  • Interface Builder TableTestViewController.xib UITableView sağlanan görünümü üzerine bir yüzeyi sürükleyin.
  • UITableView'38 *s* ve 39 *-çıkışları*zaten TableTestViewControllersınıfı temsil edecek olan Dosyanın Sahibi için takın. Yaptığınız değişiklikleri kaydetmek
  • Tekrar böyle büyük mükafat, TableTestViewController.m: aşağıdaki kodu ekleyin

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    NSLog(@"Returning num sections");
    return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSLog(@"Returning num rows");
    return 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"Trying to return cell");
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }
    cell.text = @"Hello";
    NSLog(@"Returning cell");
    return cell;
}
  • Yapı ve Hello UITableView görünür kelime görmelisiniz

  • Şimdi UITableViewbu hareket için ayrı bir sınıf, ilk Güncellemelerinden yeni bir dosya oluşturmak, UITableViewController alt sınıf seçme ve sınıfı TableTestTableViewController arama mantığı . girişimi

  • TableTestViewController.m yukarıdaki kod parçası kaldırmak ve TableTestTableViewController.m bizim bu üç yöntem varsayılan uygulama değiştirme içine yerleştirin.
  • Interface Builder içinde 50 **dosyası, UITableViewController ana İB açılan bir pencere sürükleyin ve otomatik olarak birlikte gelen UITableView yeni nesne silmek aynı içinde
  • TableTestTableViewController 53 *bu yeni sınıf için ayarlayın
  • Mevcut dataSource delegate bağlarını çıkarmak, daha önce çalışan UITableView yarattık TableTestTableViewController yeni aynı iki bağlantıları yeniden bağlayın.
  • Değişiklikleri kaydetmek, İnşa ve eğer aldığım sonuçlar alıyorsanız, UITableView fonksiyonları artık düzgün not

Çözüm: Daha fazla sorun giderme ve iPhone Developer Forums bazı yardımı ile bir çözüm kaydettim! Proje UIViewController ana sınıfı prizine UITableViewController örneği göstererek ihtiyacı var. Bunu yapmak için, sadece birincil görünümü üstbilgi için aşağıdaki Ekle (TableTestViewController.h):

#import "TableTestTableViewController.h"

ve

IBOutlet TableTestTableViewController *myTableViewController;

Sonra, Interface Builder, ana İB penceresinde TableTestTableViewController Dosyanın Sahibi yeni prizine bağlayın. Hiçbir değişiklik XİB UI kısmında gereklidir. Hayır kullanıcı kodu direkt olarak kullanılıyor olsa da, sadece bu çıkış olması, tamamen sorunu giderir. Yardımcı olanlar ve kredi sayesinde çözüm bulmak için iPhone Geliştirici Forumlarında BaldEagle gider.

CEVAP
1 Kasım 2008, CUMARTESİ


Adımları takip ettim, projeyi yeniden ve aynı sorunla karşılaştım. Temelde neredeyse bitti. 2 şey eksik (sabit bir kez çalışır) vardır:

  • Ekranda UITableView TableTestTableViewController tableView bağlamanız gerekir. IBOutlet değil, çünkü daha önce de dediğim gibi tableView özelliği geçersiz kılar ve IBOutlet yapabilirsiniz:

    @interface TableTestTableViewController : UITableViewController {
        UITableView *tableView;
    }
    
    @property (nonatomic, retain) IBOutlet UITableView *tableView;
    
  • Sonraki şey TableTestTableViewController bir başvuru ekleyin ve TableTestViewController onu korumak için. Aksi takdirde TableTestTableViewController (asılı. hiçbir şey uç yüklemeden sonra) piyasaya sürülebilir ve bu hatalı sonuçlar, çöküyor ya da bir şey göstermek olduğunu görüyorsunuz. Eklerim:

    @interface TableTestViewController : UIViewController {
        TableTestTableViewController *tableViewController;
    }
    
    @property (nonatomic, retain) IBOutlet TableTestTableViewController  *tableViewController;
    

    ve TableTestTableViewController örnek Arayüz Oluşturucu bu bağlayın.

Yukarıdaki ile bu sorun benim makinede çalıştı.

Ayrıca tüm bunların arkasındaki motivasyon yerine UITableView kendi UITableViewController kullanarak) devlet için iyi olacağını düşünüyorum. Benim durumumda sadece 80 ** içerik aynı ekranından diğer görünümleri kullanma. UILabels UIView altında UIImages diğer eklemek ve onları yukarıda onları altında veya UITableView gösterebilirim.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DominicFear

    DominicFear

    30 Kasım 2006
  • Jonnyriddlin1

    Jonnyriddlin

    4 Ocak 2007
  • xiaoyu85

    xiaoyu85

    20 ŞUBAT 2010