Impossibile dequeue la vista della raccolta quando si utilizza oggetti di uiimage in cella
-
20-12-2019 - |
Domanda
Ho problemi a ottenere questo codice per correre dopo averlo schiantato dopo diverse iterazioni. Il comportamento previsto è semplicemente visualizzare le immagini in una vista di raccolta da un array. Se commento tutti gli oggetti nell'array, funziona con una vista di raccolta vuota. logo.png esiste e può essere caricato correttamente in altre parti dell'app attraverso il menu a discesa. Delegato e DataSource è impostato correttamente su Sé. La vista Collezione ha una singola cella visualizzata con un'immagineview in esso (taggata come 100) e nient'altro. Avere un'etichetta anziché una vista immagine provoca anche un arresto anomalo con qualsiasi oggetto nell'array.
L'uscita di debug è
.Impossibile dequeuerare una vista del tipo: Uicolle-eclectionelementkindcell con cella identificatore - Deve
Registrare un pennino o una classe per l'identificatore o collegare una cella prototipo in uno storyboard
Il codice pertinente è il seguente:
ViewController.m
#import "demo_frameworkViewController.h"
@interface demo_frameworkViewController ()
@end
@implementation demo_frameworkViewController {
NSMutableArray *imageArray;
}
@synthesize imageArray;
- (void)viewDidLoad
{
imageArray = [[NSMutableArray alloc] init];
[imageArray addObject:[UIImage imageNamed:@"logo.png"]];
[imageArray addObject:[UIImage imageNamed:@"logo.png"]];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark Collection View Methods
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 1;
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
return [self.imageArray count];
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
UIImageView *imageDemo = (UIImageView *)[cell viewWithTag:100];
imageDemo.image =[imageArray objectAtIndex:indexPath.row];
[cell.layer setBorderWidth:2.0f];
[cell.layer setBorderColor:[UIColor whiteColor].CGColor];
return cell;
}
@end
.
ViewController.h
#import <UIKit/UIKit.h>
@interface demo_frameworkViewController : UIViewController <UINavigationControllerDelegate, UICollectionViewDelegate, UICollectionViewDataSource>
@property (nonatomic, retain) NSArray *imageArray;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end
. Soluzione
L'uscita di debug significa che non riesce a trovare una cella chiamata "cella".Nel tuo storyboard è necessario impostare il valore Collection Reusable View
della UicollectionViewCell per "cella" in modo che l'UicollectionVisualizza sappia quale cella utilizzare