2016-11-14 3 views
1

Ich entwickle iOS-Anwendung. Value Store auf Array, aber wenn ich App ausführen, stürzt seine mit Array-Index außerhalb der Grenzen. Bitte um Hilfe und Dank im Voraus ..NSArrayM objectAtIndex: Index 6 über Grenzen

Code:

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]; 

    } 

Crash-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) 

Antwort

2

Das Problem ist, mit dem for-Schleife. Array-Index mit 0 beginnen, damit Ihr zu for-Schleife ändern:

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

Sie verwenden i<=[_daysOfWeek count], das ist der Grund, warum Sie index 7 beyond bounds [0 .. 6] Absturz bekommen.

Anstelle von for Schleife können Sie for each Schleife verwenden und es einfach zu implementieren, und es wird nie dazu führen, dass Sie Index außerhalb des Bound Crash.

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

sollte dies funktionieren ..! –

+0

Funktioniert es für Sie? –

0

Deepak Kumar nur Ihre Logik überprüfen. Ihr Array hat 7 Werte und Sie durchlaufen es acht Mal. Ändern Sie einfach die Logik

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

oder

Verwendung for each Schleife als Nirav D beschreibt (die meisten optimierten Weg).

Glücklich Codierung ..

0

Ändern Sie Just for-Schleife Logik von i <= [_daysOfWeek count] zu i < [_daysOfWeek count] sollte Ihr Problem lösen. Um solche Fehler in Zukunft zu vermeiden, empfehle ich Ihnen, die Methode enumerateObjectsUsingBlock von NSArray zu verwenden. Es kann auf folgende Weise erfolgen:

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

}]; 
0

Bitte schreiben:

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

Es wird Ihnen helfen.

Verwandte Themen