-3

我正在使用单调类来获取 json 数据,并且我想在 tableview 中显示,但是当我第一次单击视图然后数据不显示时,第二次显示和单元格重复数据在每次单击时。

- (void)viewDidLoad
{
   [super viewDidLoad];
   singCls = [SingletoneClass sharedInstanceMethod];   // Declared Class for instance method of singletone class
   webserviceclas = [[WebserviceUtility alloc] init];
   [webserviceclas getorchardslist];
}
#pragma mark - TableView Delegates
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
   return singCls.orcharsList.count;   // Get json data of orchards list in array
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *CellIdentifier = @"Cell";

   UITableViewCell *orchardscell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

  if(orchardscell == nil)
  {

    orchardscell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
  }
  orchardscell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
  NSString *strcell = [singCls.orcharsList objectAtIndex:indexPath.row];
  orchardscell.textLabel.text = strcell;

  // Display Orchards list pass from json
  return orchardscell;
}
4

2 回答 2

0

我假设您没有嵌入一个回调来通知您UITableViewController在单例完成加载数据时重新加载数据。现在第一次显示 tableView 时没有可用的数据,并且它不会自动刷新。

于 2013-10-28T09:47:10.310 回答
0

当类获取实际数据时,不会通知您的 tableview 控制器WebserviceUtility。我假设你的WebserviceUtility类调用 webservices,一旦在这个类中接收到数据,单例类的orcharsList数组就会被更新。因此,如果到目前为止我是正确的,那么您需要在更新后通知 tableviewcontroller orcharsList。并且在这里收到通知时,需要重新加载 tableView,然后调用您的 tableview 代表。

你需要做的是:

WebserviceUtility在您的类中添加协议方法。

@protocol WebServiceDelegate

-(void)fetchedData:(WebserviceUtility*) self;

@end

添加需要向其发送通知的委托属性

@interface WebserviceUtility {
    id<WebServiceDelegate>delegate;
}
@property (nonatomic, assign) id <WebServiceDelegate> delegate;

然后在数据可用时通知委托人

if ([delegate respondsToSelector:@selector(fetchedData:)]) {
           [delegate fetchedData:self];
        } 

在你的 tableviewcontroller 类中实现这些协议,并将这个类作为委托添加到 WebserviceUtility

在 .h 文件中

@interface YourTableViewController: UITableViewController<WebServiceDelegate>

在 .m 文件中,将您的 tableviewcontroller 分配为代表WebserviceUtility

webserviceclas = [[WebserviceUtility alloc] init];
webserviceclas.delegate = self;

在控制器中实现协议方法

-(void)fetchedData:(WebserviceUtility*) self{
      //Reload your tableview here
}

希望这可以帮助。

于 2013-10-28T11:00:34.857 回答