菜鸟教程小白 发表于 2022-12-13 06:34:11

ios - 在表格 View 中显示之前过滤阵列结果


                                            <p><p><strong>我需要过滤我正在使用的数组,这样它就不会在我的 <code>UITableView 中显示所有结果(只想显示 100 个 <code>leafs</code> 中的前 20 个) </code>.</strong></p>

<p>不知道该怎么做。如果您想发布更多代码,请告诉我!</p>

<p><em>(我正在使用 RestKit,从 API 中提取,并且对象映射已经正常工作)</em></p>

<p>ViewController.m</p>

<pre><code>    @property (strong, nonatomic) NSArray *springs;
    @property (strong, nonatomic) NSMutableArray *leafs;

    - (void)viewDidLoad
    {
      ;
       [
       loadObjectsAtResourcePath:@&#34;/ss/?apikey=xx&#34;
       usingBlock:^(RKObjectLoader *loader) {
            loader.onDidLoadObjects = ^(NSArray *objects){

                  springs = objects;

// @cream-corn this is the for statement you suggested, but I can&#39;t finish it
      for (Sport *sport in objects){
                for (Leaf *leaf in spring.leafs){
                  if (leaf.abbreviation isEqualToString:@&#34;ap&#34;){
// This is where I can&#39;t figure out what to put
                        [];
                  }
                }
            }


            ;


          // @cream-corn this is where I log that I&#39;m getting correct data
            for (Spring *sppring in objects){
             NSLog(@&#34;%@&#34;, spring.name);
            for (Leaf *leaf in spring.leafs){
            NSLog(@&#34;   %@ %@&#34;, leaf.name, leaf.abbreviation);
               }
            }


            };

            [loader.mappingProvider
      setMapping:
      forKeyPath:@&#34;springs&#34;];
            loader.onDidLoadResponse = ^(RKResponse *response){

            };
      }];
    }

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
      Spring *spring = ;
      return spring.leafs.count;
    }

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
      static NSString *CellIdentifier = @&#34;standardCell&#34;;
      UITableViewCell *cell = ;

      Spring *spring = ;// 13 objects
      Leaf *leaf = ;// 30 objects

      cell.textLabel.text = leaf.shortName;
      return cell;
    }
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>好的,所以。你想专门过滤数组吗?即:删除满足特定条件的对象? <strong>或者</strong>只在表格 View 中显示前 20 个?</p>

<p>如果前者是正确的<strong>(假设这个数组是可变的)</strong>,你可以这样做:<strong>(这是一种伪代码,此代码不会复制/粘贴)</strong></p>

<pre><code>for(id obj in ) {
    if(obj does not meet condition) {

      

    }
}
</code></pre>

<p><code>reverseObjectEnumerator</code> 是这个循环中最重要的部分,没有它;它会抛出异常,因为您在枚举时发生了变异。</p>

<p>如果后者是正确的,你可以这样做:</p>

<pre><code>   - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection (NSInteger)section
{
    Spring *spring = ;
    return MIN(spring.leafs.count, 20);
}
</code></pre>

<p><code>return MIN(spring.leafs.count,20);</code> 行只返回较小的数字,<code>spring.leafs.count</code> 或 <code>20</code></p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在表格 View 中显示之前过滤阵列结果,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/21923401/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/21923401/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在表格 View 中显示之前过滤阵列结果