IOS App crash: [__NSArrayI objectAtIndex:]: indice de 0 au-delà des limites de tableau vide

J'ai une méthode que j'ai passer un 'id' ici:

NSString *id = @"4bf58dd8d48988d181941735";
[self getNames:id];

Cela fonctionne bien, mais lorsque j'utilise le 'id' partir d'un objet passé au sein de la séquence:

NSString *id = _selectedStore._id;
[self getNames:id];

J'obtiens l'erreur:

'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array'

Ce qu'il se passe?

Voici où il se fait l'erreur. Ma tentative (gardez à l'esprit que je suis nouveau à cela) est de prendre un tableau de Foursquare id, le nom, puis le photoUrl pour l'id. Si je supprime tout le code qui crée la photoUrl (je l'ai noté dans le code), il s'exécute sans s'écraser.

- (void)getNames {
NSMutableArray *final = [[NSMutableArray alloc] init];
for (SearchVenue *object in self.venues) {
[Foursquare2 venueGetDetail:object._id  callback:^(BOOL success, id result){
if (success) {
NSDictionary *dic = result;
NSArray *venue = [dic valueForKeyPath:@"response.venue"];
self.venueDetail = venue;                
NSMutableDictionary *newVen = [NSMutableDictionary dictionary];
[newVen setValue:[self.venueDetail valueForKey:@"name"] forKey:@"name"];
[final addObject:newVen];
[Foursquare2 venueGetPhotos:object._id limit:nil offset:nil callback:^(BOOL success, id result){
if (success) {
NSDictionary *dic = result;
NSArray *photos = [dic valueForKeyPath:@"response.photos"];
self.venuePhotos = photos;
//works when removed from here...
NSString *prefix = [[self.venuePhotos valueForKeyPath:@"items.prefix"] objectAtIndex:0];
NSString *size = @"100x100";
NSString *suffix = [[self.venuePhotos valueForKeyPath:@"items.suffix"] objectAtIndex:0];
NSArray *myStrings = [NSArray arrayWithObjects:prefix,size,suffix, nil];
NSString *photoUrl = [myStrings componentsJoinedByString:@"" ];
//...to here
NSMutableDictionary *newVen1 = [NSMutableDictionary dictionary];
[newVen1 setValue:photoUrl forKey:@"photoUrl"];
for(int i = 0; i < [final count]; i++) {
[[final objectAtIndex:i] addEntriesFromDictionary:newVen1];
}
_arrayOfPlaces = final;
NSLog(@"_arrayOfPlaces is %@",_arrayOfPlaces);
[self.resultsVC reloadData];
} else {
NSLog(@"%@",result);
}
}];
} else {
NSLog(@"%@",result);
}
}];
}
}
  • vérifier le tableau de comptage, avant de vérifier l'objet à l'index.
  • "id" est en construire de mot-clé pour l'objective-C. pouvez-vous s'il vous plaît essayez de changer votre nom de chaîne valide ou anythings d'autre.
  • je l'ai changé pour "l'identification", mais toujours erreur se produit.
  • Vous devriez poster plus de message d'erreur. Par exemple, la trace de la pile. Qu'est-ce que getnames a?
  • Afficher plus de détails.
  • Poste le code pour votre getnames a méthode.

InformationsquelleAutor Ryasoh | 2014-12-02