菜鸟教程小白 发表于 2022-12-13 03:03:37

ios - 在 ViewDidLoad 中为 UICollectionViewController 解析查询


                                            <p><p>我正在尝试调整 UICollectionViewController 的使用,我正在填充本地镜像数组以从 Parse 获取图像。</p>

<p>到目前为止,它非常简单。我的 NSArray 多次填充相同的本地镜像:</p>

<p>testImages = ;</p>

<p>在 collectionView:cellForItemAtIndexPath 上:我确实设置了我的单元格(来自 Storyboard):</p>

<pre><code>- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    // Set up cell identifier that matches the Storyboard cell name
    static NSString *identifier = @&#34;Cell&#34;;   
    UICollectionViewCell *cell = ;

    // Configure the cell to show photo thumbnail
    UIImageView *testImageView = (UIImageView *);

    testImageView.image = ];

    return cell;
}
</code></pre>

<p>这是有效的,看起来像这样:</p>

<p> <img src="/image/EhTNr.jpg" alt="UICollectionViewController with array of local images"/> </p>

<p>我要做的是用我从 Parse 中的 Photo 类中得到的图片替换本地创建的数组。</p>

<p>我正在尝试在 viewDidLoad 方法上执行此操作:</p>

<pre><code>PFQuery *query = ;

PFUser *user = ;
;
;
;


[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
      // The find succeeded.
      NSLog(@&#34;Successfully retrieved %d photos.&#34;, objects.count);
      testImages = ;
      NSLog(@&#34;# Images: %d&#34;, );

      // Do something with the found objects
      for (PFObject *object in objects) {               
            NSLog(@&#34;Object Name: %@&#34;, object.objectId);
      }


    } else {
      // Log details of the failure
      NSLog(@&#34;Error: %@ %@&#34;, error, );
    }
}];
</code></pre>

<p>问题是我每次都得到一个空数组。我猜想,因为一旦 collectionView:numberOfItemsInSection: 询问“testImages”数组上的元素计数,我总是得到 0 个元素。</p>

<p>当 UICollectionViewController 想要使用数组中的信息来填充单元格时,那里什么都没有。</p>

<p>我不知道我是否将代码放在了错误的位置,或者我是否使用了错误的查询。</p>

<p>你能在这里得到我的错误吗?</p>

<p>任何反馈都将不胜感激。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>最后我得到了一些工作。 @gg13 的反馈是解决空数组问题的关键。</p>

<p>我将把解决方案留在这里,以防它在其他时候对其他人有所帮助。</p>

<p>我将我的查询放在一个新方法上:</p>

<pre><code>- (void)queryForTable
{
    PFQuery *query = ;
    PFUser *user = ;
    ;
    ;
    ;

    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
      if (!error) {
            // The find succeeded.
            NSLog(@&#34;Successfully retrieved %d photos.&#34;, objects.count);

            ;

            gridImages = [ initWithCapacity:objects.count];

            // Do something with the found objects
            for (PFObject *object in objects) {

                PFFile *thumbnail = ;
                [thumbnail getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
                  if (!error) {
                        // Now that the data is fetched, update the cell&#39;s image property with thumbnail

                        NSLog(@&#34;Fetching image..&#34;);

                        ];

                        NSLog(@&#34;Size of the gridImages array: %d&#34;, );

                  } else {
                        // Log details of the failure
                        NSLog(@&#34;Error: %@ %@&#34;, error, );
                  }
                }];
            }
      } else {
            // Log details of the failure
            NSLog(@&#34;Error: %@ %@&#34;, error, );
      }
    }];
}
</code></pre>

<p>我正在调用 viewDidLoad:</p>

<pre><code>- (void)viewDidLoad
{
    ;
    // Do any additional setup after loading the view.

    ;
}
</code></pre>

<p>然后我将我的 collectionView:cellForItemAtIndexPath: 方法更改为:</p>

<pre><code>- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    // Set up cell identifier that matches the Storyboard cell name
    static NSString *identifier = @&#34;Cell&#34;;   
    UICollectionViewCell *cell = ;

    // Configure the cell to show photo thumbnail
    UIImageView *imageView = (UIImageView *);

    //NSLog(@&#34;testImages: %@&#34;, );
    imageView.image = ;

    imageView.image = ;

    return cell;
}
</code></pre>

<p>到目前为止,它正在工作。该应用程序正在从 Parse 获取图像,它看起来像这样:</p>

<p> <img src="/image/ITq9y.jpg" alt="UICollectionViewController with Parse images"/> </p>

<p>我仍然需要测试一些东西,特别是有大量图像的场景(包括进度指示器或其他东西),但至少得到这个已经是一件好事了。</p>

<p>我相信 Parse 迟早会像他们对 UITableViewController 所做的那样制作自己的 UICollectionViewController,而且事情会进一步改善。</p>

<p>如前所述,感谢您的反馈,我将把它留在这里,以防其他人遇到同样的问题,当然也愿意接受反馈和建议。</p>

<p>干杯,</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在 ViewDidLoad 中为 UICollectionViewController 解析查询,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/17475224/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/17475224/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在 ViewDidLoad 中为 UICollectionViewController 解析查询