7

Mam zamiar wyjść tutaj z mojego umysłu, w mojej bazie danych bazy danych Mam wielu użytkowników, mam podłączony bazę danych do tableviewcontroller za pośrednictwem NSFetchedResultController, a gdy widok ładuje, widzę wszystkich moich użytkowników, i Mogę wykonać push do elementu viewcontroller detail poprzez segregację scenorysków ... do tej pory, bóg, mój widok tabeli zawiera niestandardową komórkę z widokiem obrazu i 2 uitextlabele, które wszystkie mają przypisane ich wartości znaczników.UISearchDisplayController - dlaczego mój widok wyników wyszukiwania zawiera puste komórki?

Teraz, kiedy wykonuję wyszukiwanie Tworzę nowy NSFetchedResultController z predykatem i wykonuję performFetch .. Następnie otrzymuję właściwość fetchedObjects i zawiera ona pasujących użytkowników, więc żądanie wyszukiwania działa również jak urok .. we wszystkich moich danych o tabelach źródeł danych I sprawdź, czy self.tableView == self.searchdispl.view, aby zobaczyć, który kontroler powinien pobierać dane z .. We wszystkich przypadkach delegaci ntrollerów Sprawdzam, który kontroler jest aktywny, więc wiem, który widok ma zostać przeładowany. Jeśli loguję dużo danych, to wszystko jest w porządku, wszystkie metody delegatów i źródeł danych używają poprawnego widoku i kontrolera pobierania ..

W mojej komórceForRowAtIndexPath mogę wylogować się z mojego user.name, i to jest zawsze poprawne , także podczas wyszukiwania.

Problem polega na tym, że widok UISearchDisplayController, który jest tylko na wierzchu, zawiera puste komórki, chyba że ustawię komórkę dynamicznego prototypu UITableViewControllers na podstawową, a obie widoki tabeli zawierają tę etykietę z nazwą użytkownika! Segue z komórki nadal nie działa, ale są dane w komórce.

Wydaje się, że widok UISearchDisplayControllers to ogólny pogląd, przynajmniej jeśli chodzi o segues i układ komórek ...

Sprawdziłem wszystkie połączenia z UISearchDisplayController do mojego UITableViewController, a wszystko wygląda w porządku. ..

Dlaczego widok SearchDisplayControllers nie akceptuje mojego układu komórki i przenosisz?

Dziękuję :)

Update: właśnie zorientowali się, co jest nie tak, ale nie znaleziono jeszcze rozwiązania. W mojej komórceForRowAtIndexPath komórka jest zawsze skonfigurowana jako domyślna komórka, gdy thr searchdisplayview jest w tej metodzie. Czy naprawdę muszę utworzyć moją komórkę w kodzie, aby uisearchdisplay działał? Dlaczego nie może korzystać ze skonfigurowanej komórki z scenorysu?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"PersonCell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    NSLog(@"Default Cell"); 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 

NSFetchedResultsController *controller = tableView == self.tableView ? self.fetchedResultsController : self.fetchedResultsControllerForSearch; 

Person *p; 
p = [controller objectAtIndexPath:indexPath];  

[(UILabel*) [cell viewWithTag:1] setText:p.name]; 
[(UILabel*) [cell viewWithTag:2] setText:@"Status"];  

if(p.avatarImage){ 
    UIImage *avatar = [[UIImage alloc] initWithData:p.avatarImage]; 
    [(UIImageView *) [cell viewWithTag:3] setImage:avatar];  
} 

return cell; 

}

+7

Ok, po prostu pozwolę temu usiąść tutaj, chociaż zorientowałem się, co było nie tak, jestem nieco zakłopotany, ale może ten post może pomóc innym :) Problem polegał na tym, że kiedy dostałem komórka w cellforrowatindexpath, nie otrzymała go z oryginalnego widoku tablecontrollers, więc zmieniłem linię z UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier]; do UITableViewCell * cell = [self.tableView dequeueReusableCellWithIdentifier: CellIdentifier] ;, a teraz wszystko jest w porządku, komórka ma układ z storyboardu, a segues działa jak urok :) –

+0

To naprawdę działa, powinieneś opublikować to jako odpowiedź na własne pytanie! –

Odpowiedz

13

Problem było to, że kiedy mam komórkę w cellForRowAtIndexPath, nie dostać go z oryginalnego viewcontrollers tableview, więc zmienił linię z

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

do

UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

a teraz wszystko jest w porządku, komórka ma układ z serii scenariuszy i seguesów działa jak urok ..

+0

To rozwiązało mój problem. Próbuję tego na iOS 8 i wydaje mi się, że to straszny hack. Smutna mina... –