开发者

UITableView not reloading data or calling cellForRowAtIndexPath

I am having a serious issue with UITableView's reloadData method. I have a UIViewController class, WiGiMainViewController that has a UITableView and NSMuttableArray in it. I am currently issuing network calls in the AppDelegate, and posting notifications to the WiGiMainViewController once the data has been downloaded. In my selector method for the notification, reloadWigiList, I am passing an NSArray containing the the recently downloaded items. I then initialize the WiGiMainViewController's NSMuttableArray with the passed in array and proceed to call reloadData() on my UITableView object. I can see from NSLog statements that the numberOfRowsInSection is fired on reload but not the cellForRowAtIndexPath, therefore causing the UI NOT to reload the UITableView with the newly downloaded items. I have verified that the reloadData method is being called on the main thread and that the datasource delegate are set in IB and programatically in the viewDidLoad method of WiGiMainViewController. Any ideas why my UITableView, wigiLists isn't reloading the data, in particular, not calling the cellForRowAtIndexPath method?

 @interface WiGiMainViewController :     UIViewController<FBRequestDelegate,UITableViewDelegate, UITableViewDataSource> {

 //setup UI
 UITableView *wigiLists;

 WiGiAppDelegate *myAppDelegate;
 NSMutableArray *itemsList;

}
 @property (nonatomic, retain) WiGiAppDelegate *myAppDelegate;
 @property (nonatomic, retain) IBOutlet UITableView *wigiLists;
 @property (nonatomic, retain) NSMutableArray *itemsList;

-(void) reloadWigiList: (NSNotification*) notification;
-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView;
 -(NSInteger) tableView: (UITableView*) tableView numberOfRowsInSection:(NSInteger) section;
 -(UITableViewCell *) tableView: (UITableView*)tableView cellForRowAtIndexPath:   (NSIndexPath *)indexPath;

@end


 @implementation WiGiMainViewController

 @synthesize headerLabel = _headerLabel, userNameLabel = _use开发者_如何学PythonrNameLabel, facebookPicture = _facebookPicture,
 myAppDelegate, wigiLists, itemsList;

- (void)viewDidLoad {
 NSLog(@"In viewDidLoad");
 [[NSNotificationCenter defaultCenter] addObserver:self   selector:@selector(reloadWigiList:) name:@"wigiItemUpdate" object:nil];


 // get appdelicate
 self.myAppDelegate = (WiGiAppDelegate*) [[UIApplication sharedApplication] delegate];     
 self.itemsList = [[NSMutableArray alloc] init];
 //setup tableview
  self.wigiLists = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
      self.wigiLists.delegate = self;
 self.wigiLists.dataSource = self;
 //set up view
 [self.headerLabel setText:self.myAppDelegate.HEADER_TEXT];
 //check if user is logged in
 if (self.myAppDelegate.isLoggedIn) {
      //user is logged in
      NSLog(@"HERE");
      //get facebook information to populate view
      [self retrieveFacebookInfoForUser];
      //[self.myAppDelegate retrieveWigiItems];
 }else {
      //user is not logged in
      NSLog(@"user not logged in");
      //show login modal
 }
 //[self.wigiLists reloadData];
 [super viewDidLoad];
}

 -(void) reloadWigiList: (NSNotification *) notification {
 if ([NSThread isMainThread]) {
      NSLog(@"main thread");
 }else{
      NSLog(@"METHOD NOT CALLED ON MAIN THREAD!");
 }
 NSLog(@"notification recieved:%@", notification.userInfo);

 NSLog(@"in reloadwigilists:%@", wigiLists );
 NSLog(@"list size:%@", self.itemsList);
 NSLog(@"delegate:%@",self.wigiLists.delegate);
 NSLog(@"datasource:%@",self.wigiLists.dataSource);
 //populate previously empty itemsList
 [self.itemsList setArray:notification.userInfo];
 NSLog(@"list size:%@", self.itemsList);
 [self.wigiLists reloadData];

}

 /////////////////////////////////////
 // UITableViewDelegate protocols
 -(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
 //NSLog(@"numberofsections: %@", [self.itemsList count]);
 return 1;
}

 -(NSInteger) tableView: (UITableView *)tableView numberOfRowsInSection:(NSInteger) section {
 NSLog(@"7t87giuiu%@",self.itemsList);
 NSLog(@"numberofrows: %i", [self.itemsList count]);


      return [self.itemsList count];

 //return 6;

 }


Wow! after 3 days of banging my head against this problem, it was something ridiculously simple. In my ViewDidLoad method of WiGiMainViewController, i was initializing my tableview:

self.wigiLists = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];

Because I had linked the tableView I created in IB to my instance wigiLists, alloc'ing and initializing in the ViewDidLoad overwrote my link to the tableView created in IB and currently being displayed. Getting rid of this line fixed everything.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜