我想更新tableView
中的数据,并将新数据作为UITableView
中的新初始行插入。
我有两个数组:FileName
数组包含我使用ParseXM
从服务器获取的数据和用于从FileNameArray
复制的临时数组。我写了一个函数UpdateArray
来获取新数据,我将数据从FileNameArray
复制到ViewDidLoad()
中的临时数组,然后调用UpdateArray
;首先我删除FileNameArray
中的所有条目,然后向服务器发送请求ParseXML
,然后我比较FileNameArray
和temp数组,如果FileName arr > temp arr
:删除temp arr
中的所有条目{1}}并从FileName
arr复制到temp arr
,然后重新加载UITableview
的数据,但tableView
不会在第一行显示新数据。
的cellForRowAtIndexPath():
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSArray* FileNamereversed = [[FileCompletedArray reverseObjectEnumerator] allObjects];
NSArray* UploadTimereversed = [[UploadTimeArray reverseObjectEnumerator] allObjects];
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UILabel *FileNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 100, 30)];
FileNameLabel.backgroundColor = [UIColor clearColor];
FileNameLabel.font = [UIFont fontWithName:@"Helvetica" size:16];
FileNameLabel.font = [UIFont boldSystemFontOfSize:16];
FileNameLabel.textColor = [UIColor blackColor];
NSLog(@"Reseversed TEMP array %@",FileNamereversed);
FileNameLabel.text =[FileNamereversed objectAtIndex:indexPath.row];
[cell.contentView addSubview: FileNameLabel];
[FileNameLabel release];
UILabel *UploadTimeLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 20, 300, 25)];
UploadTimeLabel.backgroundColor = [UIColor clearColor];
UploadTimeLabel.font = [UIFont fontWithName:@"Helvetica" size:14];
UploadTimeLabel.textColor = [UIColor grayColor];
UploadTimeLabel.text = [UploadTimereversed objectAtIndex:indexPath.row];
[cell.contentView addSubview: UploadTimeLabel];
[UploadTimeLabel release];
UILabel *CompleteLabel = [[UILabel alloc] initWithFrame:CGRectMake(140, 12, 170, 25)];
CompleteLabel.backgroundColor = [UIColor clearColor];
CompleteLabel.font = [UIFont fontWithName:@"Helvetica" size:14];
CompleteLabel.textColor = [UIColor darkGrayColor];
CompleteLabel.text =@"Completed";
CompleteLabel.textAlignment = NSTextAlignmentRight;
[cell.contentView addSubview: CompleteLabel];
[CompleteLabel release];
}
//[temp removeAllObjects];
// temp = [FileCompletedArray mutableCopy];
return cell;
}
更新数组():
-(void)updateArray{
[NSThread sleepForTimeInterval:4.0];
[FileCompletedArray removeAllObjects];
...
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:afRequest];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success");
NSString * parsexmlinput = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"Response in Loop CompleteView: %@", parsexmlinput); //000400010001
// dispatch_async(dispatch_get_main_queue(), ^{
[self parseXMLFile:parsexmlinput];
NSLog(@"File Completed array: %@", FileCompletedArray);
NSLog(@"File Temp out array: %@", temp);
NSLog(@"File Completed count: %lu",(unsigned long)[ FileCompletedArray count]);
NSLog(@"File Temp out count: %lu", (unsigned long)[temp count]);
// NSLog(@"State: %@", state);
if([FileCompletedArray count ] != [temp count]) // compare 2 array
{
[temp removeallObjects];
temp = [FileCompletedArray mutableCopy];
[_tableView reloadData];
}
else
{
NSLog(@"2 array equal");
}
}
当我调用UpdateArray
时,虽然服务器有新数据但两个数组相等,所以我的tableView
不会更新。
你能告诉我解决方案吗?提前谢谢。
编辑的评论: 原来的措辞几乎无法理解 - 纠正我可能错过或误读某些方面。强烈建议原作者进行校对。
答案 0 :(得分:0)
要更新表格视图,您必须根据您的要求更新阵列。
您可以将对象添加到:[yourArray insertObject:object atIndex:0];
//for first row.
然后使用新数组重新加载表:[yourTable reloadData]
这对你有用。
答案 1 :(得分:0)
@ V-Xtreme答案是正确的,另一个选项是......
此外,对于这类工作,您需要使用insertRowsAtIndexPaths:withRowAnimation:
方法,例如
[self.tableview insertRowsAtIndexPaths:indexPath withRowAnimation:YES ];
其中indexPath包含您要添加的行号。