– : index 4294967295 за пределами для пустого массива с arc4random

EDIT: я заменил arc4random () на arc4random_uniform () для исправления

Я использую тестовый полет для отслеживания сбоев. были исправлены ошибки, однако я столкнулся с этой ошибкой, я не уверен, почему индекс настолько велик.

-[__NSArrayM objectAtIndex:]: index 4294967295 beyond bounds for empty array 

вполне вероятно, что именно здесь ошибка

 for (NSUInteger i = 0; i < count; ++i) { // Select a random element between i and end of array to swap with. int nElements = count - i; int n = (arc4random() % nElements) + i; [randomName exchangeObjectAtIndex:i withObjectAtIndex:n]; [randomImgName exchangeObjectAtIndex:i withObjectAtIndex:n]; [randomID exchangeObjectAtIndex:i withObjectAtIndex:n]; } 

которые вызвали аварии здесь

 //Frog Name Caption NSString * tempCaption = [defaultFrogImageCaption objectAtIndex:[defaultFrogImageCaption count]-1]; self.dFrogID = [defaultFrogID objectAtIndex:[defaultFrogID count]-1]; 

Я считаю, что это ошибка, но я не знаю, как решить эту ошибку.

оценил все комментарии и помощь

 -(void)defaultFrogSetup { self.imageArray = [[NSMutableArray alloc] initWithObjects: [UIImage imageWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"defaultFrog/d7.jpg"]], [UIImage imageWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"defaultFrog/d9.jpg"]], [UIImage imageWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"defaultFrog/d11.jpg"]], [UIImage imageWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"defaultFrog/d27.jpg"]], [UIImage imageWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"defaultFrog/d6.jpg"]], nil]; //self.defaultFrogID = [[NSMutableArray alloc] initWithObjects:@"6",@"8",@"10",@"26",@"5",nil]; self.defaultFrogID = [[NSMutableArray alloc] initWithObjects:@"6",@"8",@"10",@"24",@"5",nil]; self.defaultFrogImageCaption = [[NSMutableArray alloc] initWithObjects:@"Verreaux's Tree Frog",@"Green Tree Frog",@"Red-Eyed Tree Frog",@"Crucifix Frog",@"Eastern Dwarf Tree Frog",nil]; NSUInteger count = [self.defaultFrogID count]; //NSLog(@"Count %i",[self.defaultFrogID count]); NSMutableArray *randomImgName = self.imageArray; NSMutableArray *randomID = self.defaultFrogID; NSMutableArray *randomName = self.defaultFrogImageCaption; //likely bug here for (NSUInteger i = 0; i < count; ++i) { // Select a random element between i and end of array to swap with. int nElements = count - i; int n = (arc4random() % nElements) + i; [randomName exchangeObjectAtIndex:i withObjectAtIndex:n]; [randomImgName exchangeObjectAtIndex:i withObjectAtIndex:n]; [randomID exchangeObjectAtIndex:i withObjectAtIndex:n]; } self.imageArray = randomImgName; self.defaultFrogID=randomID; self.defaultFrogImageCaption=randomName; //NSLog(@"default filename %@",self.defaultFrogImageCaption); //NSLog(@"default frog ID %@",self.defaultFrogID); self.imageViewTop.alpha = 1.0; self.imageViewBottom.alpha = 0.0; self.imageViewBottom = [[UIImageView alloc] initWithFrame:CGRectMake(0,44,320,367)]; self.imageViewTop = [[UIImageView alloc] initWithFrame:CGRectMake(0,44,320,367)]; [self.view addSubview:imageViewTop]; [self.view addSubview:imageViewBottom]; self.buttonCaption = [UIButton buttonWithType:UIButtonTypeCustom]; //default placement self.buttonCaption.frame = CGRectMake(245, 367, 70, 44); //[buttonCaption setTitle:@"\u00A9" forState:UIControlStateNormal]; [self.buttonCaption addTarget:self action:@selector(buttonCheck) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:self.buttonCaption]; [self defaultFrogAnimation:buttonCaption.frame.size.width]; } -(void)defaultFrogAnimation:(float)previousWidth { defaultFrog = 1; foundFrog = 0; //picture loop imageViewTop.image = imageViewBottom.image; imageViewBottom.image = [imageArray objectAtIndex:[imageArray count] - 1]; [imageArray insertObject:imageViewBottom.image atIndex:0]; [imageArray removeLastObject]; imageViewTop.alpha = 1.0; imageViewBottom.alpha = 0.0; //Frog Name Caption NSString * tempCaption = [defaultFrogImageCaption objectAtIndex:[defaultFrogImageCaption count]-1]; self.dFrogID = [defaultFrogID objectAtIndex:[defaultFrogID count]-1]; // make the buttons content appear in the top-left [buttonCaption setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter]; [buttonCaption setContentVerticalAlignment: UIControlContentVerticalAlignmentCenter ]; [defaultFrogImageCaption insertObject:tempCaption atIndex:0]; [defaultFrogImageCaption removeLastObject]; [defaultFrogID insertObject:dFrogID atIndex:0]; [defaultFrogID removeLastObject]; //button setting [buttonCaption.titleLabel setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; [buttonCaption.titleLabel setFont:[UIFont systemFontOfSize:17]]; [buttonCaption setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [[buttonCaption layer] setCornerRadius:5.0f]; [[buttonCaption layer] setMasksToBounds:YES]; [[buttonCaption layer] setBackgroundColor:[[UIColor colorWithRed:255 green:255 blue:255 alpha:1] CGColor]]; [buttonCaption.titleLabel setFrame:CGRectMake(0,9, 25, 25)]; stringsize = [tempCaption sizeWithFont:[UIFont systemFontOfSize:19]]; CGFloat diff = stringsize.width - previousWidth; //NSLog(@"diff %f",diff); [UIView animateWithDuration:3 animations:^{ imageViewTop.alpha = 0.0; imageViewBottom.alpha = 1.0; } completion:^(BOOL completed){ if (completed) [self defaultFrogAnimation:stringsize.width]; } ]; [UIView animateWithDuration:0.1 delay:0 options:0 animations:^{ [buttonCaption setTitle:tempCaption forState:UIControlStateNormal]; NSLog(@"frog Name %@",tempCaption ); NSLog(@"frog ID %@",dFrogID); } completion:^(BOOL completed) { }]; [UIView animateWithDuration:0.3 delay:0 options:0 animations:^{ [buttonCaption setFrame:CGRectMake(buttonCaption.frame.origin.x-diff, buttonCaption.frame.origin.y, buttonCaption.frame.size.width + diff, buttonCaption.frame.size.height)]; } completion:^(BOOL completed){ }]; } 

2 Solutions collect form web for “– : index 4294967295 за пределами для пустого массива с arc4random”

Размер массива равен нулю. Большое число фактически равно -1, выраженное как целое число без знака. Когда вы оцениваете [количество массивов] -1, поскольку размер массива равен нулю, он пытается получить доступ к объекту с индексом -1. Я подозреваю, что массив defaultFrogId или defaultFrogIdCaption пуст, потому что вы не указали сохранение или что-то, когда вы его объявили.

Путь, который вы исправили, все в порядке. Но он будет работать только в iOS 4.3 и выше … Для исправления проблемы используйте abs(arc4random())%mod_factor вместо arc4random()%mod_factor . Проблема связана с тем, что arc4random() возвращает целое значение без знака.

  • Сохранение изображения только на пользовательском альбоме
  • Кто-нибудь с трудом может заставить ZBar работать в своем проекте iOS8 / Xcode?
  • Как ограничить мое приложение только iPhone 6 и 6 Plus?
  • Получение данных из Info plist
  • Дублировать символы только при создании для simlator
  • Xcode Bot Не удалось после обновления до Xcode 5.1
  • Создание NSURL с использованием AssetPath
  • Как мы назначаем объект в `UINavigationController`, не нажимая на него объект ViewController.?
  • CollectionView прокрутите страницу вверх
  • Как я могу просмотреть изображение из библиотеки изображений iPhone?
  • Не удалось найти изображение для разработчиков. IOS 9.1 & Xcode Version 7.0.1 (7A1001)
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.