2016-11-14 7 views
1

Я разрабатываю приложение iOS. Хранилище значений в массиве, но когда я запускаю приложение, его выдает с индексом массива за пределами границ. Пожалуйста, помогите и спасибо заранее ..NSArrayM objectAtIndex: index 6 за пределами границ

Код:

daysOfWeek = [NSArray arrayWithObjects:@"Monday",@"Tuesday",@"Wednesday",@"Thursday",@"Friday",@"Saturday",@"Sunday", nil]; 
    for (int i = 0; i<= [_daysOfWeek count]; i++) { 
    _mondayView=[[UIView alloc]initWithFrame:CGRectMake(45, 300 , 830, 30.0)]; 
     [_mondayView setBackgroundColor:[UIColor colorWithRed:190.0/255.0 green:190.0/255.0 blue:194.0/255.0 alpha:1.0]]; 
     [_weeklyView addSubview:_mondayView]; 

     UILabel *daysLabel = [[UILabel alloc]initWithFrame:CGRectMake(65.0f, 300.0f, 120.0f, 30.0f)]; 
     daysLabel.backgroundColor = [UIColor blueColor]; 
     daysLabel.text = [NSString stringWithFormat:@"%@",[_daysOfWeek objectAtIndex:i]]; 
     [_weeklyView addSubview:daysLabel]; 

    } 

Краш Log:

2016-11-14 11:48:41.266 FH Harvey[1839:67640] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 7 beyond bounds [0 .. 6]' 
*** First throw call stack: 
(
    0 CoreFoundation      0x000000011101934b __exceptionPreprocess + 171 
    1 libobjc.A.dylib      0x000000011065d21e objc_exception_throw + 48 
    2 CoreFoundation      0x0000000110f53eeb -[__NSArrayI objectAtIndex:] + 155 
    3 FH Harvey       0x000000010fe1ee62 -[FHWeeklyViewController viewDidLoad] + 1026 
    4 UIKit        0x00000001115ddc99 -[UIViewController loadViewIfRequired] + 1258 
    5 UIKit        0x00000001115e4102 -[UIViewController __viewWillAppear:] + 118 
    6 UIKit        0x000000011160efbf -[UINavigationController _startCustomTransition:] + 1290 
    7 UIKit        0x000000011161fc34 -[UINavigationController _startDeferredTransitionIfNeeded:] + 697 
    8 UIKit        0x0000000111620dc7 -[UINavigationController __viewWillLayoutSubviews] + 58 
    9 UIKit        0x0000000111817d6f -[UILayoutContainerView layoutSubviews] + 223 
    10 UIKit        0x0000000111500f50 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1237 
    11 QuartzCore       0x000000010ffbdcc4 -[CALayer layoutSublayers] + 146 
    12 QuartzCore       0x000000010ffb1788 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 
    13 QuartzCore       0x000000010ffb1606 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 
    14 QuartzCore       0x000000010ff3f680 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 280 
    15 QuartzCore       0x000000010ff6c767 _ZN2CA11Transaction6commitEv + 475 
    16 UIKit        0x0000000111435a97 _UIApplicationFlushRunLoopCATransactionIfTooLate + 206 
    17 UIKit        0x0000000111c456e0 __handleEventQueue + 5672 
    18 CoreFoundation      0x0000000110fbe311 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 
    19 CoreFoundation      0x0000000110fa359c __CFRunLoopDoSources0 + 556 
    20 CoreFoundation      0x0000000110fa2a86 __CFRunLoopRun + 918 
    21 CoreFoundation      0x0000000110fa2494 CFRunLoopRunSpecific + 420 
    22 GraphicsServices     0x00000001163a0a6f GSEventRunModal + 161 
    23 UIKit        0x000000011143c964 UIApplicationMain + 159 
    24 FH Harvey       0x000000010fe221bf main + 111 
    25 libdyld.dylib      0x000000011491368d start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
(lldb) 

ответ

2

Проблема с вашей цикл. Индекс массива начинается с 0 так изменить свой цикл для:

for (int i = 0; i < [_daysOfWeek count]; i++) { 

Вы используете i<=[_daysOfWeek count], что является причиной вы получаете index 7 beyond bounds [0 .. 6] аварии.

Вместо того, чтобы использовать цикл for, вы можете использовать цикл for each и его легко реализовать, и он никогда не приведет к индексу из связанного с ним сбоя.

for (NSString* str in _daysOfWeek) { 
    NSLog(@"%@",str); 
} 
+1

это должен сработать ..! –

+0

Это работает для вас? –

0

DEEPAK kumar просто подтвердите свою логику. Ваш массив имеет 7 значений, и вы повторяете его 8 раз. Просто изменить логику

for (int i = 0; i < [_daysOfWeek count]; i++) 

или

Используйте for each петлю, как Nirav D описывает (самый оптимизированный способ).

Счастливое кодирование ..

0

Просто меняются за логику петли из i <= [_daysOfWeek count] в i < [_daysOfWeek count] должен решить вашу проблему. Однако, чтобы избежать подобных ошибок в будущем, я предлагаю вам использовать метод enumerateObjectsUsingBlockNSArray. Это может быть сделано следующим образом:

NSArray *daysOfWeek = [NSArray arrayWithObjects:@"Monday",@"Tuesday",@"Wednesday",@"Thursday",@"Friday",@"Saturday",@"Sunday", nil]; 
[daysOfWeek enumerateObjectsUsingBlock:^(NSString* _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 

}]; 
0

Пожалуйста напишите:

for (int i = 0; i < [_daysOfWeek count]; i++) 

Это поможет вам.

 Смежные вопросы

  • Нет связанных вопросов^_^