1

を呼び出すときに更新されていない別の UITableView を含む静的セルを持つ UITableView がありますreloadData。ios5使用。

以下のコードを実行すると、 でsubViewTable定義された値が表示されviewDidLoad、AFNetwork 要求後に更新されません。

NSLog の出力によるreloadDataと、AFNetwork リクエストの成功ブロックを呼び出した後、cellForRowAtIndexPath が呼び出されていません。

私のコードは以下です

MainViewController.h

#import <UIKit/UIKit.h>
#import "SubViewTableViewController.h"

@interface MainController : UITableViewController{
  SubviewTableViewController *subViewTVC;
  IBOutlet UITableView *subViewTable;
}

MainViewController.m

@import "SubViewTableViewController.h"

@implementation MainController

- (void)viewDidLoad
{
  [super viewDidLoad];
  if (subViewTableViewController == nil)
  {
    subViewTVC = [[SubViewTableViewController alloc] init];
  }
  [subViewTable setDataSource: subViewTVC];
  [subViewTable setDelegate: subViewTVC];
  subViewTableViewController.view = subViewTableViewController.tableView;
 }

@end

SubViewTableController.h

#import <UIKit/UIKit.h>

@interface SubViewTableController : UITableViewController <UITableViewDataSource, UITableViewDelegate>{
  NSMutableArray *data;
}

@end

SubViewTableController.m

#import "SubViewTableController.h"
#import "AFNetworking.h"

@implementation SubViewTableController

- (void)fetchCustomData
{
  request = // Set NSM mutable request;
  AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest: request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {

    // Omitted code that adds JSON objects to data array 

    [self.tableView performSelectorOnMainThread:@selector(reloadData)                                withObject:nil waitUntilDone:NO];
  }
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {};
  [operation start];
} 

- (void)viewDidLoad
{
  [super viewDidLoad];
  if (data == nil)
  {
    data = [NSMutuableArray arrayWithObjects:@"1",@"2", nil];
  }
  [self fetchCustomData];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
  // Return the number of sections.
  return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
  // Return the number of rows in the section.
  NSLog(@"Data Count: %i", data.count);
  return [data count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  static NSString *CellIdentifier = @"DataCell";
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  // Configure the cell...
  if (cell == nil){
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
  }
  cell.textLabel.text = [data objectAtIndex:indexPath.row];
  NSLog(@"Cell item: %@", [data objectAtIndex:indexPath.row]);
  return cell;
}

@end

NSLog 出力

2012-12-16 13:59:31.538 testing[37592:f803] Data Count: 2
2012-12-16 13:59:31.539 testing[37592:f803] Cell item: 1
2012-12-16 13:59:31.541 testing[37592:f803] Cell item: 2
2012-12-16 13:59:31.575 testing[37592:f803] Data Count: 6
4

2 に答える 2

2

私は、トリガーされたコールバックからSubViewmyから my に通知を送信することになりました。MainViewsuccessAFJSONRequestOperation[subViewTable reloadData]

SubViewTableController.m AFJSONRequestOperation 成功のコールバック:

{
[[NSNotificationCenter defaultCenter] postNotificationName:@"SubViewUpdated" object:nil];
}

MainViewController.m

- (void)viewDidLoad
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(subViewUpdated) name:@"SubViewUpdated" object:nil];
}

- (void)subViewUpdated
{
   [subViewTable reloadData];
}

- (void)viewDidUnload
{
  //Unregister notifications
  [[NSNotificationCenter defaultCenter] removeObserver:self];
}
于 2012-12-24T02:22:51.397 に答える
0

バックグラウンド スレッドで取得してみてください...

-(void)updateDataInBackground {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0), ^(void) {
        // Background Thread:
        // hard work/updating/fetching here:

        // when finished ...
        dispatch_async(dispatch_get_main_queue(), ^(void) {
            // Main Thread:
            [myTableView reloadData];
        }); 
    });
}
于 2012-12-16T23:31:01.960 に答える