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 = @"Cell";
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(@"Successfully retrieved %d photos.", objects.count);
testImages = ;
NSLog(@"# Images: %d", );
// Do something with the found objects
for (PFObject *object in objects) {
NSLog(@"Object Name: %@", object.objectId);
}
} else {
// Log details of the failure
NSLog(@"Error: %@ %@", 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(@"Successfully retrieved %d photos.", 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's image property with thumbnail
NSLog(@"Fetching image..");
];
NSLog(@"Size of the gridImages array: %d", );
} else {
// Log details of the failure
NSLog(@"Error: %@ %@", error, );
}
}];
}
} else {
// Log details of the failure
NSLog(@"Error: %@ %@", 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 = @"Cell";
UICollectionViewCell *cell = ;
// Configure the cell to show photo thumbnail
UIImageView *imageView = (UIImageView *);
//NSLog(@"testImages: %@", );
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]