2012-09-18 3 views
2

J'ai le code suivant dans une sous-classe de UITableViewController. Sous iOS 5.1, cela fonctionne très bien, mais sous iOS 6, self.tableView est nul (à la fois en simulateur et sur le vrai périphérique). Est-ce que je le fais mal? Pourquoi la vue n'est-elle pas définie immédiatement après l'init?tableView dans UITableViewController est nul après init

- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 

    if (self) 
    { 
     UIView * bck = [[UIView alloc] init]; 
     [bck setBackgroundColor:[UIColor whiteColor]]; 
     self.tableView.backgroundView = bck; 
     [bck release]; 
    } 

    return self; 
} 

EDIT:

Je suis clouée sur le problème:

J'ai la classe

AccountsListViewController_iPad 

qui est sous-classe de

AccountsListViewController : UITableViewController 

AccountsListViewController a c'est tabl eView & voir chargé après init (comme je m'y attends). D'autre part, AccountsListViewController_iPad a sa vue et tableView égal à zéro. Je l'ai enlevé tout de AccountsListViewController_iPad il se présente maintenant comme suit:

.h 
#import <UIKit/UIKit.h> 
#import "AccountsListViewController.h" 
@interface AccountsListViewController_iPad : AccountsListViewController 
@end 

.m 
#import "AccountsListViewController_iPad.h" 
@implementation AccountsListViewController_iPad 
@end 

Et encore Affichons est nul. À mon avis, il devrait se comporter exactement de la même manière que sa superclasse, mais ce n'est pas le cas.

Répondre

2

D'accord, je l'ai travaillé dessus:

classe Il y avait AccountsListViewController_iPad et le fichier AccountsListViewController_iPad.xib associé. Xib, bien que n'étant pas chargé dans le code et le propriétaire du fichier dans xib n'étant pas AccountsListViewController_iPad, était toujours en cours de chargement. Pour une raison quelconque, la vue de table dans xib était définie sur la propriété 'table' dans le propriétaire du fichier (qui n'existait pas) et donc view et tableView étaient nuls.

Je ne sais toujours pas pourquoi le xib a été chargé ou pourquoi il problème existe sous iOS 5.x arriver

+0

C'était tout. Quand j'ai créé le xib en utilisant le "Nouveau fichier -> Cocoa Touch Class", c'est arrivé. – Joqus

3

Je suppose que c'est parce que la vue de la table n'est pas chargée tant que la vue n'est pas chargée. Vous devez déplacer le paramètre d'affichage sur viewDidLoad.

La seule propriété « vue » vous devez configurer dans init méthodes est .navigationItem (même si je pense que UINavigationItem est probablement mieux considéré comme faisant partie du contrôleur plutôt que vue).

+0

Voilà ce que je pense. Ce que je ne comprends pas, c'est pourquoi cela a soudainement cessé de travailler dans iOS 6? Ou est-ce quelque chose qui a fonctionné juste par hasard? –

+0

@ Rafał Je soupçonne qu'avant iOS 6, la tableView était chargée paresseuse dans le getter mais maintenant elle est chargée dans 'loadView'. (Je soupçonne que vous pouvez forcer 'tableView' à charger en appelant' self.view; 'avant' self.tableView.backgroundView = bck; '. Mais ne faites pas cela, faites le correctement et utilisez' viewDidLoad'. –

Questions connexes