我在这里阅读了很多关于我的问题的帖子,但没有一个有效,所以提前感谢您的帮助。
我有一个表格视图,它加载了一个自定义笔尖。我有来自网络 JSON 文件的数据。我已经实现了一个刷新调用(我现在只需点击一个单元格就可以覆盖它)。
调用该方法时,会调用并解析新的 JSON。并且单元格更新了。我可以通过向下滚动表格视图来确认这一点,我可以看到新的行。但是可见的行仍然存在。
我试图使数组为零,循环遍历并根据对象删除,但似乎没有任何效果。
这是代码
#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