[__NSArrayM objectAtIndex:]: index 2 jenseits der Grenzen [0 .. 1]
ich bin eine neue iOS-Entwickler, ich habe eine Anwendung mit Analyse und dynamische Zelle, aber wenn ich die app starte, finde ich, dass die app abgestürzt ist aufgrund der Grund, auf dem Titel " mein code wie den folgenden
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
myArray = [[NSMutableArray alloc] init];
//create new view if no view is available for recycling
//view = [[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 250.0f, 300.0f)] autorelease];
FXImageView *imageView = [[[FXImageView alloc] initWithFrame:CGRectMake(0, 0, 250.0f, 350.0f)] autorelease];
imageView.contentMode = UIViewContentModeScaleAspectFit;
imageView.asynchronous = YES;
//imageView.reflectionScale = 0.5f;
//imageView.reflectionAlpha = 0.25f;
// imageView.reflectionGap = 10.0f;
imageView.shadowOffset = CGSizeMake(0.0f, 2.0f);
imageView.shadowBlur = 5.0f;
imageView.cornerRadius = 10.0f;
view = imageView;
[ProgressHUD dismiss];
NSString *string1 = [[NSUserDefaults standardUserDefaults] stringForKey:@"Class"];
PFQuery *query = [PFQuery queryWithClassName:[NSString stringWithFormat:@"%@",string1]];
query.cachePolicy = kPFCachePolicyNetworkElseCache;
//show loader view
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
myArray = [[NSMutableArray alloc] initWithArray:objects];
PFObject *object = [myArray objectAtIndex:index];
[file getDataInBackgroundWithBlock:^(NSData *data1, NSError *error) {
if (!error) {
((UIImageView *)view).image = [UIImage imageWithData:data1];
//[HUD hideUIBlockingIndicator];
}
}];
}
}];
return view;
}
verwende ich zum ersten Bildschirm UICollectionView mit dynamischen Daten analysieren, wie der folgende code
pragma collectionView delegieren
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"cell";
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
CALayer *layer = cell.layer;
[layer setCornerRadius:8.0f];
[layer setMasksToBounds:YES];
//[layer setBorderWidth:1.0f];
// layer.backgroundColor = [UIColor whiteColor].CGColor;
//can you click
PFObject *imageObject = [myArray objectAtIndex:indexPath.item];
PFFile *imageFile = [imageObject objectForKey:@"image"];
NSString *name = [imageObject objectForKey:@"name"];
[imageFile getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
if (!error) {
UIImageView *imageView = (UIImageView *)[cell viewWithTag:100];
imageView.image = [UIImage imageWithData:data];
UILabel *title2 = (UILabel *)[cell viewWithTag:200];
title2.text = [NSString stringWithFormat:@"%@",name];
title2.font = [UIFont fontWithName:@"GESSTextMedium-Medium" size:12];
}
}];
return cell;
}
ich brauche etwas Hilfe um zu wissen wo der Fehler ist;
jedes mal erhalte ich diese Fehlermeldung auf der Konsole [__NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1]
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist nicht genügend Informationen. Wir auch don T wissen, die genaue Zeile für diesen Absturz.
Was ist die tatsächliche Anzahl der Objekte in
myArray
?Was Sie wieder auf
collectionView:numberOfItemsInSection:
und so weiter..
Imho die einfachste Lösung wäre das Debuggen dieser Absturz. Und finden Sie heraus, warum der index größer ist, dann
objectAtIndex:
erwartet. Versuchen Sie dies:Nun app nutzen diesen Haltepunkt auf eine Ausnahme während des Debuggens.
PFObject *object = [myArray objectAtIndex:index];
carousel:viewForItemAtIndex:reusingView:
index-Methode erhält, die Sie mitfindObjectsInBackgroundWithBlock
falsch ist. An dieser Stelle dein array sollte schon verfügbar sein. Sie können nicht sicher sein, obfindObjectsInBackgroundWithBlock
finden Sie genügend ElementeBegrüßungen und begrüßt, neue Entwickler. Die erste Sache, die Sie wollen, um herauszufinden, wo die exception passiert. Zu machen, sind Sie gehen zu müssen, um schalten Sie die "exception breakpoint".
Die genaue Art und Weise Sie das tun, variiert von Xcode version (Dank Apple). Unter der Annahme, dass Sie mit Xcode 6 gibt es eine video hier, dass erklärt es.
Ich denke, es ist sehr wahrscheinlich, dass Ihre Karussell-miss-reporting die Anzahl der Elemente hat. Oder aus irgendeinem anderen Grund, den Sie versuchen, ein Karussell-Element, das nicht vorhanden... vielleicht ist das Karussell erwartet eine
nil
wenn er fragt mit einem index von einer Zelle außerhalb der bestehenden Auswahl, aber Sie gehen davon aus, der index gültig ist und schlagen Sie ein array bounds exception. Auf eine wilde Vermutung, eventuell ist der Fehler mit den Zeilen, hier:Ich würde vermuten, dass
section
ist kein Gültiger index inmyArray
.(Übrigens
myArray
ist eine veränderbare Kopie desobjects
array. Warum machst du das? Sie keine änderungen anmyArray
, so scheint es unnötig.)Haben Sie wahrscheinlich eine Methode
collectionView: numberOfItemsInSection:
in Ihrer Sammlung anzeigen delegieren. Oder wenn Sie nicht, müssen Sie wahrscheinlich ein. Was ist der code, der im moment?PFObject *object = [myArray objectAtIndex:index];
findObjectsInBackgroundWithBlock:
. Es muss einen Mechanismus für Ihre Stellvertretung / data-source-code hier zu erklären, dass auf dem Karussell, aber Sie haben dies nicht aktuell.- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return [myArray count]; }
Dein problem liegt in dieser Zeile:
PFObject *object = [myArray objectAtIndex:index];
Index für das ist 2 aber nur noch 2 Objekte in das array. Da die max-index der Arrays ist 1 (0..1), es stürzt ab. Ich schlage vor, zu sehen, wo diese Methode aufgerufen wird und wie Sie einen index out of range.
Ist es wohl einer dieser beiden Linien:
oder
Das problem ist, dass index (indexPath.item im zweiten Fall) enthält den Wert 2, doch myArray ist der Größe 2 (also nur gültige Indizes 0 und 1).
PFObject *object = [myArray objectAtIndex:index];
NSLog(@"%i %i", index, myArray.count);
rechts oben. Sie werden sehen, dass Sie versucht sind, der access-index 2 aber, dass die Zählung der array ist 2. Ihr problem ist, dass Sie nur den Aufruf dieser Funktion, wenn der index < myArray.zählenendlich finde ich das problem wo; muss ich definieren, das array für iCarousel numberOfItems so wird der code wie den folgenden
also habe ich die Flucht aus dem index problem
vielen Dank für den Austausch mit mir
Bitte überprüfen Sie Ihre numberOfRowsInSection Methode und die array-Zählung, die Sie verwenden.