为什么这个'*** - [__ NSArrayI objectAtIndex:]:索引0超出了空数组的界限'

时间:2014-01-26 21:50:04

标签: ios objective-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];
}

3 个答案:

答案 0 :(得分:2)

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 :(得分:1)

您不能按原样放置bool值。而是使用@(NO)。这应该有用。

答案 2 :(得分:0)

NO不是对象,但您需要将对象存储在数组中。所以 使用[NSNull null]@(NO)代替NO