0

NSfetchedResultsController を使用して設定された iOS アプリに UITableView があります。ユーザーがアプリをスクロールしたり操作したりせずにセルを見ているだけの場合、サーバーから送信された外部パケットが単一のセルに影響を与える可能性があります (たとえば、ある種のステータスやタイトルを変更します)。この場合、セルが必要です。自動的に更新されます。現時点では、変更されたセルを表示する唯一の方法は、セルを更新するために cellForRowAtIndexPath が呼び出されるように UITableView をスクロールすることです。

それを達成する方法はありますか?いくつかのアプローチを試しましたが、どれもうまくいかないようです。

更新 1 :

また、サーバーからパケットを受信して​​セル indexPath を構築するとすぐに、基本的にセルを変更してタイトルを更新する configureCell を呼び出そうとしました。ブレークポイントを使用すると、セルのラベルが変更されていることがわかりますが、画面には反映されません。

更新 2: セルがテーブルに読み込まれた後、tableView 参照が null になることに気付きました。なぜこれが起こるのかわかりませんが、 reloadData が役に立たなくなります。

4

4 に答える 4

0

問題は解決しました。UIViewController のサブクラスへの新しい参照をプログラムで作成していましたが、テーブル ビューへの参照が失われていました。

于 2013-07-16T09:39:05.547 に答える
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

コードの下にある可能性があります

/**
    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 に答える
-1

その時点でサーバーから応答を受信する時点を知っているので、テーブルセルまたはテーブルビューをリロードするだけです。

このリンクを確認してください

于 2013-07-08T14:20:06.720 に答える