- (void)reorderPartners { if (!self.cardsArray || !self.cardsArray.count) { return; } NSMutableArray *newArray = [NSMutableArray array]; NSMutableArray *oldArray = [self.cardsArray mutableCopy]; int partnersToFind = 1; int index = 0; while (partnersToFind) { NSString* brand = ((Card*)oldArray[index]).company.brand; if ([brand isEqualToString:@"smth"]) { [newArray addObject:oldArray[index]]; [oldArray removeObject:oldArray[index]]; partnersToFind--; index--; } index++; } partnersToFind = 2; index = 0; while (partnersToFind) { NSString *brand = ((Card*)oldArray[index]).company.brand; if ([brand isEqualToString:@"smth"] || [brand isEqualToString:@"smth"]) { [newArray addObject:oldArray[index]]; [oldArray removeObject:oldArray[index]]; NSLog(@"%lu", (unsigned long)oldArray.count); partnersToFind--; index--; } index++; } for (Card* card in oldArray) { NSString* brand = card.company.brand; if (![brand isEqualToString:@"smth"]) { [newArray addObject:card]; } } self.cardsArray = [newArray copy]; } At assembly such error arrives: - [__ NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array '. I understand that this is due to an empty array. But after 10 hours of debugging, I’m thinking a little. Do not kick much, help me figure it out.