TableView 没有更新
Posted
技术标签:
【中文标题】TableView 没有更新【英文标题】:TableView is not updating 【发布时间】:2015-09-02 23:40:56 【问题描述】:我希望你们帮助我编写从网站加载数据的代码。让我们从代码开始:
-(void)viewDidLoad
[self loadDataFromUrl];
-(void)loadDataFromUrl
NSString *myUrl = [NSString stringWithFormat:@"http://WebSite/phpFiles/File.php"];
NSURL *blogURL = [NSURL URLWithString:myUrl];
NSData *jsonData = [NSData dataWithContentsOfURL:blogURL];
NSError *error = nil;
NSDictionary *dataDictionary = [NSJSONSerialization
JSONObjectWithData:jsonData options:0 error:&error];
for (NSDictionary *bpDictionary in dataDictionary)
HotelObject *currenHotel = [[HotelObject alloc]initWithVTheIndex:
[bpDictionary objectForKey:@"TheIndex"] timeLineVideoUserName:
[bpDictionary objectForKey:@"timeLineVideoUserName"] timeLineVideoDetails:
[bpDictionary objectForKey:@"timeLineVideoDetails"] timeLineVideoDate:
[bpDictionary objectForKey:@"timeLineVideoDate"] timeLineVideoTime:
[bpDictionary objectForKey:@"timeLineVideoTime"] timeLineVideoLink:
[bpDictionary objectForKey:@"timeLineVideoLink"] timeLineVideoLikes:
[bpDictionary objectForKey:@"timeLineVideoLikes"] videoImage:
[bpDictionary objectForKey:@"videoImage"] timeDeviceToken:
[bpDictionary objectForKey:@"deviceToken"]];
[self.objectHolderArray addObject:currenHotel];
-(NSMutableArray *)objectHolderArray
if(!_objectHolderArray) _objectHolderArray = [[NSMutableArray alloc]init];
return _objectHolderArray;
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
return 1;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:
(NSInteger)section
return [self.objectHolderArray count];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:
(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Cell";
Cell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier
forIndexPath:indexPath];
HotelObject *currentHotel = [self.objectHolderArray
objectAtIndex:indexPath.row];
cell.lblID.text = currentHotel.vvTheIndex;
cell.lblName.text = currentHotel.vvUserName;
cell.lblCity.text = currentHotel.vvVideoDate;
cell.lblAddress.text = currentHotel.vvVideoLikes;
return cell;
上面的代码是从一个 Url 加载数据并填充 TableView,这一步工作正常。该应用程序还有另一个 ViewController,即 DetailsView,在 DetailsView 中用户可以更新一些信息。当用户返回 TableView 时,什么都没有发生(我的意思是数据仍然相同并且没有更新)。我试图从 ViewDidAppear 调用 loadDataFromurl 但它不起作用。
我确实添加了:
[self.tableView reloadData];
但结果还是一样。
她也是我的 NSObject 代码:
-(instancetype)initWithVTheIndex:(NSString *)vTheIndex
timeLineVideoUserName:(NSString *)vUserName
timeLineVideoDetails:(NSString *)vVideoDetails
timeLineVideoDate:(NSString *)vVideoDate
timeLineVideoTime:(NSString *)vVideoTime
timeLineVideoLink:(NSString *)vVideoLink
timeLineVideoLikes:(NSString *)vVideoLikes
videoImage:(NSString *)vVideoImage
timeDeviceToken:(NSString *)vDeviceToken
self = [super init];
if(self)
self.vvTheIndex = vTheIndex;
self.vvUserName = vUserName;
self.vvVideoDetails = vVideoDetails;
self.vvVideoDate = vVideoDate;
self.vvVideoTime = vVideoTime;
self.vvVideoLink = vVideoLink;
self.vvVideoLikes = vVideoLikes;
self.vvVideoImage = vVideoImage;
self.vvDeviceToken = vDeviceToken;
return self;
我的问题是:从 DetailsView 移动时,甚至当我拉动刷新时,如何更新 TableView。
提前致谢
【问题讨论】:
【参考方案1】:您没有正确地重新加载 UITableView 的数据源。
假设远程 URL 正在使用新数据进行更新,而问题只是重新加载 TableView,请确保在 loadDataFromUrl
完成后添加您的 [self.tableView reloadData]
。
reloadData
方法将始终刷新表的内容,因此要么没有在正确的时间调用它,要么您没有更新 self.objectHolderArray
。 (您可以在更新后调用loadDataFromUrl
后设置断点进行调试。)
【讨论】:
谢谢Meriw,我知道了【参考方案2】:在 viewDidLoad 生命周期上,首先 [self.tableView reloadData] 重新加载 tableview,然后再进行另一项工作。
【讨论】:
以上是关于TableView 没有更新的主要内容,如果未能解决你的问题,请参考以下文章