TableView 未使用来自 AFNetworking 响应对象的新数据重新加载

Posted

技术标签:

【中文标题】TableView 未使用来自 AFNetworking 响应对象的新数据重新加载【英文标题】:TableView not reloading with new data from AFNetworking Response Object 【发布时间】:2014-09-10 06:51:38 【问题描述】:

下面我有一个朋友列表表格视图的代码,它有自定义表格视图单元格,可以向右滑动以显示 3 个按钮。其中 1 个按钮是 removeFriend 按钮。

该按钮应该从好友列表中删除好友。然后表格应该重新加载已删除朋友的更新表格视图。 在我离开视图然后返回视图之前,已删除的朋友不会从 tableview 中消失。

服务器正在发送更新的 JSON 好友列表数据,删除的好友已删除。我到底做错了什么?

正在使用的代码如下:

-(void) deleteAction:(id) sender

UIButton * btn = (UIButton *) sender;  // delete friend

NSLog(@"%d", btn.tag);

self.dic = [friendsList objectAtIndex:btn.tag];

NSString * friendID = [self.dic objectForKey:@"id"];

NSLog(@"rejected ID : %@", friendID);
deleteAlert=[[UIAlertView alloc]initWithTitle:@"Friend Removal Confirmation" message:@"\n\nAre you sure you want to remove this friend\n\n\n\n" delegate:self cancelButtonTitle:@"NO" otherButtonTitles:@"YES", nil];
[deleteAlert show];





-(void) deleteAction2


NSString * friendID = [self.dic objectForKey:@"id"];

[self removeFriend:friendID];

   

-(void) removeFriend:(NSString *) friendId

NSString * userID = [[NSUserDefaults standardUserDefaults]  objectForKey:USERID];

NSMutableDictionary* params =[NSMutableDictionary dictionaryWithObjectsAndKeys:@"removeFriend", @"command", friendId,@"Requesterid", userID/*friendId*/, @"userid", nil];
NSLog( @"%@", params);
[SVProgressHUD showWithStatus:@"Loading..." maskType:SVProgressHUDMaskTypeBlack];

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:BaseURLString parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) 

    NSLog(@"JSON: %@", responseObject);

    [SVProgressHUD dismiss];

    NSString * error = [responseObject objectForKey:@"error"];

    if(error)
        [[[UIAlertView alloc] initWithTitle:@"Error" message:error delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil] show];
    else
    
        friendsList = [NSMutableArray arrayWithArray:[(NSDictionary *)responseObject objectForKey:@"result"]];



    
    //        else
    //            [[[UIAlertView alloc] initWithTitle:@"Alert" message:@"You sent request." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil] show];


 failure:^(AFHTTPRequestOperation *operation, NSError *error) 

    [SVProgressHUD dismiss];

    NSLog(@"Error: %@", error);
];
  [friendsTableView reloadData];


#pragma alertview delegate
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;

NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
if(alertView == addFriendAlert)


    if(buttonIndex == 1)
    
        addFriendId = [addFriendAlert textFieldAtIndex:0].text;

        if([addFriendId isEqualToString:@""])
            return;

        NSLog(@"%@", addFriendId);

        [self sendingFriendAddRequest:addFriendId];
    



if(alertView == deleteAlert)

if([title isEqualToString:@"NO"])

    NSLog(@"Nothing to do here");

else if([title isEqualToString:@"YES"])

    NSLog(@"Delete the cell");
    [self deleteAction2];



【问题讨论】:

【参考方案1】:

网络请求是异步的

[friendsTableView reloadData];

可以在更新friendsList的成功块之前执行

【讨论】:

谢谢,我把代码改成了:else friendsList = [NSMutableArray arrayWithArray:[(NSDictionary *)responseObject objectForKey:@"result"]]; [friendsTableView 重新加载数据]; 现在可以使用了 @user3007683 很高兴我能提供帮助。顺便说一句,你最好在主线程中做reloadData。做到这一点 GCD 是一个不错的选择

以上是关于TableView 未使用来自 AFNetworking 响应对象的新数据重新加载的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C 如何使用 AFNetwork 上传字符串

来自 firebase 的数据未填充到我的表格视图中

AFNetwork、Magical Record和块内保存

如何使用 AFNetwork 的 AFHTTPRequestOperationManager 设置 HTTP 请求正文?

Swift 解析查询结果未出现在 tableview 中

Swift 的 AFNetwork [关闭]