Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS 5:numberOfRowsInSection不';行不通_Ios_Cocoa Touch_Uitableview - Fatal编程技术网

iOS 5:numberOfRowsInSection不';行不通

iOS 5:numberOfRowsInSection不';行不通,ios,cocoa-touch,uitableview,Ios,Cocoa Touch,Uitableview,我在storybord和UISegmentedControl中有一个tableView,用不同的数据和不同的设计填充上面提到的表。我的问题是,当我切换UISegmentedControl时,Section meth中的rowsin数不起反应 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if(self.segment.selectedSegmentIndex==

我在storybord和UISegmentedControl中有一个tableView,用不同的数据和不同的设计填充上面提到的表。我的问题是,当我切换UISegmentedControl时,Section meth中的rowsin数不起反应

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(self.segment.selectedSegmentIndex==0)
{
    return [self.items count];
    NSLog(@"Nominals: %d",self.items.count);
}
if(self.segment.selectedSegmentIndex==1)
{
    return [self.coinageArr count];
    NSLog(@"Coinage: %d",self.coinageArr.count);
}
//return 0; Complains about no return.
}
嗯,导航时nslog不起作用。在这种情况下如何返回NSInteger

提前准备好

编辑:shannoga

段控制器切换方法:

-(IBAction)segmentValueChaged:(id)sender
{
switch (self.segment.selectedSegmentIndex) 
{
    case 0:
    {
         DBAccess *access=[[DBAccess alloc]init];
        self.items=[access returnNominals:self.entityID nk:fromPeriod];
        [access closeDataBase];            
        self.tableView.hidden=NO;
        [self.tableView reloadData];
         break;
    }
    case 1:
    {
        DBAccess *access=[[DBAccess alloc]init];
        self.coinageArr=[access returnCoinage:fromPeriod period:self.entityID];
        self.tableView.hidden=NO;
        [self.tableView reloadData];

        break;
    }
}
}
  • NSLog不会工作,因为返回在到达此行之前生效,并且永远不会执行
将其更改为:

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(self.segment.selectedSegmentIndex==0)
{
     NSLog(@"Nominals: %d",self.items.count);
    return [self.items count];
}
if(self.segment.selectedSegmentIndex==1)
{
   NSLog(@"Coinage: %d",self.coinageArr.count);
    return [self.coinageArr count];
}
//return 0; Complains about no return.
}
  • 能否显示更改UISegmentedControl时调用的方法
  • 请注意,您不需要设置可以使用
    else
    的2 if语句
  • 正如@Ryan所说,您应该在您的UISegmentedControl更改中使用
    [tableview重载数据]
    。如果您更改
    valueChanged
    方法中的
    self.items
    数组,并将
    numberofrowsin部分保留为不更改,则效果会更好,这样看起来会像这样:

      - (void)valueChanged:(id)sender
      {
        if(self.segment.selectedSegmentIndex==0)
        {
            self.items = what ever
        }else{
            self.items = what ever
        }
        [tableview reloadData];
       }
    
        - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
         return [self.items count];
       }
    
祝你好运
  • NSLog不会工作,因为返回在到达此行之前生效,并且永远不会执行 将其更改为:

        - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
    if(self.segment.selectedSegmentIndex==0)
    {
         NSLog(@"Nominals: %d",self.items.count);
        return [self.items count];
    }
    if(self.segment.selectedSegmentIndex==1)
    {
       NSLog(@"Coinage: %d",self.coinageArr.count);
        return [self.coinageArr count];
    }
    //return 0; Complains about no return.
    }
    
    • 能否显示更改UISegmentedControl时调用的方法
    • 请注意,您不需要设置可以使用
      else
      的2 if语句
    • 正如@Ryan所说,您应该在您的UISegmentedControl更改中使用
      [tableview重载数据]
      。如果您更改
      valueChanged
      方法中的
      self.items
      数组,并将
      numberofrowsin部分保留为不更改,则效果会更好,这样看起来会像这样:

        - (void)valueChanged:(id)sender
        {
          if(self.segment.selectedSegmentIndex==0)
          {
              self.items = what ever
          }else{
              self.items = what ever
          }
          [tableview reloadData];
         }
      
          - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
           return [self.items count];
         }
      

    祝您好运

    更改UISegmentedControl的值后,您需要更新表。您可以使用
    [tableView reloadData]轻松实现这一点
    或者您可以使用类似于
    [tableView重新加载节:0 with TableViewAnimation:UITableViewRowAnimationAutomatic]

    最好的方法可能是为您的控件使用valueChanged方法

    // Wherever you init your UISegmentedControl
    segmentedControl addTarget:self selector:@selector(valueChanged:) forEvent:UIControlEventValueChanged];
    
    - (void)valueChanged:(id)sender
    {
        [tableview reloadData];
    }
    

    更改UISegmentedControl的值后,需要更新表。您可以使用
    [tableView reloadData]轻松实现这一点
    或者您可以使用类似于
    [tableView重新加载节:0 with TableViewAnimation:UITableViewRowAnimationAutomatic]

    最好的方法可能是为您的控件使用valueChanged方法

    // Wherever you init your UISegmentedControl
    segmentedControl addTarget:self selector:@selector(valueChanged:) forEvent:UIControlEventValueChanged];
    
    - (void)valueChanged:(id)sender
    {
        [tableview reloadData];
    }
    

    当分段控件的选定段更改时,是否重新加载表?是的,在-(iAction)segmentValueChaged:(id)我调用的发送方方法[self.tableView reloadData];如前所述,您必须在返回之前移动NSLog调用。另外,您应该在这里使用if-else构造,而不是两个if.O.K,那么为什么不在这两种情况下使用1个数组“self.items”呢?当分段控件的选定段发生更改时,您是否重新加载表?是的,在-(iAction)segmentValueChaged:(id)sender方法中,我调用[self.tableView reloadData];如前所述,您必须在返回之前移动NSLog调用。此外,您应该在这里使用if-else构造,而不是两个if.O.K。那么,对于这两种情况,为什么不使用1个数组“self.items”作为示例呢?@shannoga是正确的。我认为最好的做法是将逻辑从
    numberOfRowsInSection
    方法中去掉,并将其移动到实际发生交互的方法中。但是numberOfRowsInSection中的返回怎么办?我必须返回整数。我应该定义本地int-var并为其分配行的值并返回它吗?或者我可以返回0.Ah。是…返回[自我物品计数];如果使用相同的数组。@shannoga是对的。我认为最好的做法是将逻辑从
    numberOfRowsInSection
    方法中去掉,并将其移动到实际发生交互的方法中。但是numberOfRowsInSection中的返回怎么办?我必须返回整数。我应该定义本地int-var并为其分配行的值并返回它吗?或者我可以返回0.Ah。是…返回[自我物品计数];如果使用相同的数组。