ive read through alot of posts here on my issue, but none have worked yet, so thanks in advance for helping.
I have a tableview, that loads a custom nib. I have data coming from a web JSON file. I have implemented a refresh call (im now overriding this with just a cell tap).
Upon calling the method, the new JSON is called and parsed. And the cells updated. I can confirm this with scrolling the tableview down I can seemy new rows. But the rows that are visible remain.
Ive tried to make the array nil, cycle through and remove based on object but nothing seems to work.
here is code
#import "MMNewsViewController.h"
#import "MMCatsDetailController.h"
#import "CellView.h"
#import "FeatureCell.h"
//#import "MMnewsData.h"
@interface MMNewsViewController ()
@end
@implementation MMNewsViewController
@synthesize titleData;
@synthesize imageData;
@synthesize imageLargeData;
@synthesize dateData;
@synthesize descriptionData;
@synthesize linkData;
@synthesize cityData;
@synthesize _jsonResult;
@synthesize _jsonResultImage;
@synthesize _jsonResultImageLarge;
@synthesize _jsonResultDate;
@synthesize _jsonResultDescription;
@synthesize _jsonResultLink;
@synthesize _jsonResultCity;
@synthesize featureImage;
@synthesize region;
- (void)viewDidLoad
{
[super viewDidLoad];
UINib *nib = [UINib nibWithNibName:@"CellView" bundle:nil];
[self.tableView registerNib:nib forCellReuseIdentifier:@"CellView"];
[self.navigationController.navigationBar setTintColor:[UIColor blackColor]];
self.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFeatured tag:0];
self.navigationController.title = @"News";
self.tabBarItem.title = @"FooBar";
self.title = @"Music News";
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to Refresh"];
[refreshControl addTarget:self action:@selector(refreshView:)
forControlEvents:UIControlEventValueChanged];
[self.view addSubview:refreshControl];
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
region = @"wellington";
[self makeDataRequests];
}
-(void)makeDataRequests
{
NSString *strURL = [NSString stringWithFormat:@"MYSITEjson.php?region=%@",region ];
NSMutableData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL] ];
NSMutableDictionary *arrayResult = [NSJSONSerialization JSONObjectWithData:dataURL options:kNilOptions error:nil];
NSMutableArray *dataArray = [arrayResult objectForKey:@"tickets"]; //2
_jsonResult = [[NSMutableArray alloc] init];
_jsonResultImage = [[NSMutableArray alloc] init];
_jsonResultImageLarge = [[NSMutableArray alloc] init];
_jsonResultDate= [[NSMutableArray alloc] init];
_jsonResultDescription= [[NSMutableArray alloc] init];
_jsonResultLink= [[NSMutableArray alloc] init];
_jsonResultCity= [[NSMutableArray alloc] init];
for(NSMutableDictionary *newsDict in dataArray){
NSMutableDictionary *titleDict = [newsDict objectForKey:@"title"];
NSMutableDictionary *imageDict = [newsDict objectForKey:@"image"];
NSMutableDictionary *imageLargeDict = [newsDict objectForKey:@"imageLarge"];
NSMutableDictionary *dateDict = [newsDict objectForKey:@"pubDate"];
NSMutableDictionary *descriptionDict = [newsDict objectForKey:@"description"];
NSMutableDictionary *linkDict = [newsDict objectForKey:@"link"];
NSMutableDictionary *cityDict = [[newsDict objectForKey:@"venue"] objectForKey:@"city"];
[_jsonResult addObject:titleDict];
[_jsonResultImage addObject:imageDict];
[_jsonResultImageLarge addObject:imageLargeDict];
[_jsonResultDate addObject:dateDict];
[_jsonResultDescription addObject:descriptionDict];
[_jsonResultLink addObject:linkDict];
[_jsonResultCity addObject:cityDict];
// NSLog(@"%@",cityDict);
}
// NSString *strResult = [[NSString alloc] initWithData:dataURL encoding:NSUTF8StringEncoding];
self.titleData = _jsonResult;
self.imageData = _jsonResultImage;
self.imageLargeData = _jsonResultImageLarge;
self.dateData = _jsonResultDate;
self.descriptionData = _jsonResultDescription;
self.linkData = _jsonResultLink;
self.cityData = _jsonResultCity;
[self performSelector:@selector(delayedReloadData) withObject:nil afterDelay:1.5];
}
-(void) delayedReloadData
{
NSLog(@"delayedReloadData");
[self.tableView reloadData];
}
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation{
NSLog(@"reloadRowsAtIndexPaths");
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"COUNTER: %i",[self.titleData count]);
// Return the number of rows in the section.
return [self.titleData count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"cellForRowAtIndexPath");
NSUInteger row = [indexPath row];
static NSString *CellIdentifier = @"CellView";
CellView *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil){
NSLog(@"New Cell Made");
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CellView" owner:nil options:nil];
for(id currentObject in topLevelObjects)
{
if([currentObject isKindOfClass:[CellView class]])
{
cell = (CellView *)currentObject;
break;
}
}
}
[[cell titleLabel] setText:[titleData objectAtIndex:row]];
[[cell dateLabel] setText:[cityData objectAtIndex:row]];
NSData *data = [NSData dataWithContentsOfURL: [NSURL URLWithString:[imageData objectAtIndex:row]]];
UIImage *img1 = [UIImage imageWithData:data];
[[cell imageLabel] setImage:img1];
return cell;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
#pragma mark - Table view delegate
- (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated{}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Navigation logic may go here. Create and push another view controller.
MMCatsDetailController *detailViewController = [[MMCatsDetailController alloc] initWithNibName:@"MMCatsDetailController" bundle:nil];
NSUInteger row = [indexPath row];
NSString *titleSender = [titleData objectAtIndex:row];
NSString *dateSender = [dateData objectAtIndex:row];
NSString *imageSender = [imageData objectAtIndex:row];
NSString *imageLargeSender = [imageLargeData objectAtIndex:row];
NSString *descriptionSender = [descriptionData objectAtIndex:row];
NSString *linkSender = [linkData objectAtIndex:row];
detailViewController.titleSend = titleSender;
detailViewController.dateSend = dateSender;
detailViewController.imageSend = imageSender;
detailViewController.imageLargeSend = imageLargeSender;
detailViewController.descriptionSend = descriptionSender;
detailViewController.linkSend = linkSender;
//NSLog(@"linkSender=%@",linkSender);
region = @"nelson";
[self makeDataRequests];
// [self.navigationController pushViewController:detailViewController animated:YES];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
-(void)refreshView:(UIRefreshControl *)refresh {
refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Refreshing data..."];
// custom refresh logic would be placed here...
region = @"nelson";
[self makeDataRequests];
NSLog(@"HEre");
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMM d, h:mm a"];
NSString *lastUpdated = [NSString stringWithFormat:@"Last updated on %@",
[formatter stringFromDate:[NSDate date]]];
refresh.attributedTitle = [[NSAttributedString alloc] initWithString:lastUpdated];
[refresh endRefreshing];
NSLog(@"HEre");
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
NSLog(@"numberOfSectionsInTableView");
return 1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSUInteger row = [indexPath row];
if(row==0){
// return 200;
}
else{
// return 96;
}
return 96;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0,0,tableView.frame.size.width,10)];
UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, headerView.frame.size.width, headerView.frame.size.height)];
headerLabel.font = [UIFont boldSystemFontOfSize:12];
headerLabel.text = @"Music News";
headerLabel.backgroundColor = [UIColor blackColor];
headerLabel.textColor = [UIColor whiteColor];
[headerView addSubview:headerLabel];
return headerView;
}
@end