UICollectionView stürzt zufällig, weil der Hervorhebung Problem

Ich habe eine UICollectionView auf iOS7 die Abstürze zufällig beim intensiven scrollen. Ich konnte zombies und festgestellt, dass es gibt mir die Fehlermeldung:

*** -[NSIndexPath section]: message sent to deallocated instance 0x17dbc970

Ich glaube, dies ist aufgrund einer von Apple beschriebene Fehler hier. Scheinbar stürzt die app, wenn jemand highlights einer Zelle beim scrollen schnell, und dann das OS versucht unhighlight ist es, wenn es sich bewegt, Weg vom Schirm, wenn es aufhört zu existieren. Die vorgeschlagene Lösung ist das deaktivieren der userInteractionEnabled - Eigenschaft der Zelle, und dann Bearbeiten Sie die Auswahl mithilfe UIGestureRecogniser.

Hat sonst noch jemand mit gleichen Problem? Auch ich habe versucht, entfernen die userInteractionEnabled Eigenschaft und mit einer Geste recogniser, aber das scheint nicht zu funktionieren. Irgendeine Idee, wie kann ich dieses Problem beheben?

BEARBEITEN: Code Hinzugefügt, auf Anfrage

-(UICollectionViewCell*) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

NSString *CellIdentifier = @"Gallery_Cell";

GalleryCell *cell= (GalleryCell *)[self.flowCollection dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];

if (indexPath.row < self.collectionData.count) {

    CellDetails *dets = [self.collectionData objectAtIndex:indexPath.row];

    NSURL *mainImageURL = [NSURL URLWithString:dets.imageURL];

    cell.image.contentMode = UIViewContentModeScaleAspectFill;
    cell.image.clipsToBounds = YES;

    if ([[[SDWebImageManager sharedManager] imageCache] imageFromDiskCacheForKey:[self cacheKeyForURL:mainImageURL]] == nil) {

          [cell.image setImageWithURL:mainImageURL placeholderImage:nil];

    }else{

          [cell.image setImage:[[[SDWebImageManager sharedManager] imageCache] imageFromDiskCacheForKey:[self cacheKeyForURL:mainImageURL]]];

    }
}

return cell;
}

BEARBEITEN: mehr code..

Definierte ich die GalleryCell für die Wiederverwendung wie folgt:

[self.flowCollection registerNib:[UINib nibWithNibName:@"Thumbs_Cell" bundle:nil] forCellWithReuseIdentifier:@"Gallery_Cell"];

Den GalleryCell Klasse Umsetzung:

GalleryCell.h

@interface GalleryCell : UICollectionViewCell

@property (nonatomic, retain) IBOutlet UIImageView *image;

@end

GalleryCell.m

@implementation GalleryCell
@synthesize image;

-(void) setHighlighted:(BOOL)highlighted {
    [super setHighlighted:highlighted];
    [self setNeedsDisplay];
}

-(void)prepareForReuse {
    [super prepareForReuse];
    [self.image cancelCurrentImageLoad]; //SDWebImage method to cancel ongoing image load
}
  • Sie laden Daten in Zellen von Core Data? Möglicherweise ist dieser Absturz passiert, wenn cellForRowAtIndexPath: arbeitet.
  • Ich bin mit SDWebImage Bilder laden, um die Zellen aus dem Internet.
  • So sollten Sie kümmern sich darum, dass zu verwenden, da UICollectionView Anrufe cellForRowAtIndexPath: jedes mal, wenn die Zelle sichtbar wird.
  • Ok. Aber nicht diese haben zu tun mit der situation, wenn die Zelle unsichtbar wird, und wird freigegeben? Ich schaltete den userInteractionEnabled Eigenschaft, und der Absturz tritt nicht mehr auf. Das hat natürlich etwas zu tun mit den markierten Zustand der Zelle.
  • Die log sagt, dass der code versucht, sendet eine Nachricht an aufgehoben - Instanz. Halten Sie im Verstand meine Bemerkung über UICollectionView - und check-out-Szenario.
  • Erste Sache, die wurde auf mein Kopf, dass SDWebImage versucht, um Bild zu versteckten Zelle.
  • Aber warum hat der Absturz tritt nicht ein, wenn ich userInteractionEnabled auf FALSE?
  • Auch habe ich gerade kommentiert die SDWebImage code zu deaktivieren, das Bild laden und es nochmal versucht. Der Absturz immer noch Auftritt.
  • Zeigen Sie Ihre cellForRowAtIndexPath: Umsetzung.
  • Code Hinzugefügt, wie gefordert. Bitte überprüfen Sie es heraus.
  • Kann ich die definition der GalleryCell Klasse bitte?
  • Hinzugefügt mehr code. Überprüfen Sie bitte.

Schreibe einen Kommentar