/ / Чому це "*** - [__ NSArrayI objectAtIndex:]: індекс 0 за межами для порожнього масиву" - ios, object-c, nsarray, nsrangeexception

Чому це "*** - [__ NSArrayI objectAtIndex:]: індекс 0 за межами для порожнього масиву" - ios, object-c, nsarray, nsrangeexception

Чому я отримую MSRangeException з цим кодом:

NSArray *patientenVornamen = [NSArray arrayWithObjects:@"Michael", @"Thomas", @"Martin", nil];
NSArray *patientenNachnamen = [NSArray arrayWithObjects:@"Miller", @"Townsend", @"Mullins", nil];
NSArray *patientenWeiblich = [NSArray arrayWithObjects:NO, NO, NO , nil];
NSArray *patientenGeburtsdatum = [NSArray arrayWithObjects:[NSDate date], [NSDate date], [NSDate date], nil];
for (int i = 0; i < 3; i++) {
Patient *patient = [NSEntityDescription insertNewObjectForEntityForName:@"Patient" inManagedObjectContext:_coreDataHelper.context];
patient.vorname = [patientenVornamen objectAtIndex:i];
patient.nachname = [patientenNachnamen objectAtIndex:i];
patient.geburtsdatum = [patientenGeburtsdatum objectAtIndex:i];
patient.weiblich = [patientenWeiblich objectAtIndex:i];
}

Відповіді:

2 для відповіді № 1
NSArray *patientenWeiblich = [NSArray arrayWithObjects:NO, NO, NO , nil];

Ви не можете встановити первинні типи в NSArray. У вашому випадку, компілятор мовчить просто тому, що NO є 0, що ефективно nil. Отже, ви отримуєте порожній NSArray.

Ви повинні їх обернути NSNumber перший:

NSArray *patientenWeiblich = [NSArray arrayWithObjects:@(NO), @(NO), @(NO) , nil];

А потім отримати значення з:

[[patientenWeiblich objectAtIndex:i] boolValue];

1 для відповіді № 2

Ви не можете встановити значення bool, як є. Замість цього використовуйте @ (NO). Це має працювати.


0 для відповіді № 3

NO це не об'єкт, але потрібно зберігати об'єкти усередині масиву. Тому використовувати [NSNull null] або @(NO) замість NO.