首先在TableView IOS上添加新行

时间:2013-07-04 07:24:41

标签: iphone ios uitableview object add

我想更新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不会更新。 你能告诉我解决方案吗?提前谢谢。

编辑的评论: 原来的措辞几乎无法理解 - 纠正我可能错过或误读某些方面。强烈建议原作者进行校对。

2 个答案:

答案 0 :(得分:0)

要更新表格视图,您必须根据您的要求更新阵列。

  1. 您可以将对象添加到:[yourArray insertObject:object atIndex:0]; //for first row.

  2. 然后使用新数组重新加载表:[yourTable reloadData]

  3. 这对你有用。

答案 1 :(得分:0)

@ V-Xtreme答案是正确的,另一个选项是......

此外,对于这类工作,您需要使用insertRowsAtIndexPaths:withRowAnimation:方法,例如

[self.tableview insertRowsAtIndexPaths:indexPath withRowAnimation:YES ];

其中indexPath包含您要添加的行号。