Pytanie jest proste: jak ładować niestandardowe UITableViewCell
pliki Xib? Pozwala to na użycie Konstruktora interfejsów do zaprojektowania komórek. Odpowiedź najwyraźniej nie jest prosta ze względu na problemy z zarządzaniem pamięcią. Wątek wspomina o tym problemie i sugeruje rozwiązanie, ale jest wydany przed wydaniem NDA i nie zawiera kodu. Oto długi wątek, który omawia ten problem bez ostatecznej odpowiedzi.
Oto kod, którego użyłem:
static NSString *CellIdentifier = @"MyCellIdentifier";
MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
cell = (MyCell *)[nib objectAtIndex:0];
}
Aby użyć tego kodu, utwórz MyCell.m / .h, nową podklasę UITableViewCell
i dodaj IBOutlets
odpowiednie komponenty. Następnie utwórz nowy plik „Pusty XIB”. Otwórz plik Xib w IB, dodaj UITableViewCell
obiekt, ustaw jego identyfikator na „MyCellIdentifier”, ustaw klasę na MyCell i dodaj swoje komponenty. Na koniec podłącz IBOutlets
do komponentów. Pamiętaj, że nie ustawiliśmy właściciela pliku w IB.
Inne metody zalecają ustawienie właściciela pliku i ostrzeżenie przed wyciekiem pamięci, jeśli Xib nie zostanie załadowany przez dodatkową klasę fabryczną. Testowałem powyższe pod Instruments / Leaks i nie zauważyłem wycieków pamięci.
Więc jaki jest kanoniczny sposób ładowania komórek z Xib? Czy ustawiamy właściciela pliku? Czy potrzebujemy fabryki? Jeśli tak, to jak wygląda kod dla fabryki? Jeśli istnieje wiele rozwiązań, wyjaśnijmy zalety i wady każdego z nich ...