0

我在使用 NSfetchedResultsController 填充的 iOS 应用程序中有一个 UITableView。当用户只是查看单元格而不滚动或与应用程序交互时,可能会有服务器发送的外部数据包影响单个单元格(例如更改某种状态或标题),在这种情况下,我想要单元格自动更新。目前显示修改后的单元格的唯一方法是滚动 UITableView 以便调用 cellForRowAtIndexPath 来更新单元格。

任何想法如何实现?我尝试了几种方法,但似乎都没有。

更新 1

我还尝试调用 configureCell,它基本上会修改单元格以更新其标题,只要我从服务器收到数据包并构建单元格 indexPath。通过使用断点,我看到单元格的标签已更改,但未反映在屏幕中。

更新 2: 我注意到在表格中加载单元格后,我的 tableView 引用变为空。我不知道为什么会发生这种情况,但它使 reloadData 无用。

4

4 回答 4

0

可能下面的代码对你有帮助

/**
    HTTP CONSTANTS
 **/
#define TIMEOUT_INTERVAL 60
#define CONTENT_TYPE @"Content-Type"
#define URL_ENCODED @"application/x-www-form-urlencoded"
#define GET @"GET"
#define POST @"POST"

-(NSMutableURLRequest*)getNSMutableURLRequestUsingPOSTMethodWithUrl:(NSString *)url postData:(NSString*)_postData
{
    NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:TIMEOUT_INTERVAL];
    [req setHTTPMethod:POST];
    [req addValue:URL_ENCODED forHTTPHeaderField:CONTENT_TYPE];
    [req setHTTPBody: [_postData dataUsingEncoding:NSUTF8StringEncoding]];
    return req;
}



   NSString *_postData = {<Your postData>}
    NSMutableURLRequest *req = [self getNSMutableURLRequestUsingPOSTMethodWithUrl:LOGIN_URL postData:_postData];
    [NSURLConnection sendAsynchronousRequest:req queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
     {
         if (error)// it means server error
         {
             //error while connecting server
         }
         else
         {
             NSError *errorInJsonParsing;
             NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&errorInJsonParsing];
             if(errorInJsonParsing) //error parsing in json
             {
                 //error in json parsing
             }
             else
             {
                 @try
                 {
                    NSLog(@"json==%@",json);
                   [self.tableView reloadRowsAtIndexPaths:@[indexPathOfYourCell] withRowAnimation:UITableViewRowAnimationNone];
                 }
                 @catch (NSException *exception)
                 {
                     //exception
                 }

             }
         }
     }];
于 2013-07-08T14:32:36.807 回答
0

采用

[UITableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:yourRowNumber inSection:yourSectionNumber]] withRowAnimation:UITableViewRowAnimationFade];

相应的文档可以在这里找到 - http://developer.apple.com/library/ios/documentation/uikit/reference/UITableView_Class/Reference/Reference.html#//apple_ref/occ/instm/UITableView/reloadRowsAtIndexPaths:withRowAnimation

于 2013-07-09T19:55:53.267 回答
0

问题解决了,我以编程方式创建了对 UIViewController 子类的新引用,并且丢失了对表视图的引用。

于 2013-07-16T09:39:05.547 回答
-1

您知道何时会收到来自服务器的响应,此时您只需重新加载表格单元格和表格视图。

检查此链接

于 2013-07-08T14:20:06.720 回答