Ios 创建核心数据对象时视图控制器崩溃

Ios 创建核心数据对象时视图控制器崩溃,ios,core-data,uipickerview,Ios,Core Data,Uipickerview,我有一个视图控制器,当用户请求将对象添加到数据库时会触发该控制器。该视图具有文本输入字段和UIPICKERVIEW。在我添加一个NSMANAGEDOBJECT来存储输入的数据之前,视图一直加载并正常工作 头文件: `@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;` `@property (strong, nonatomic) Training *trainingEvent;`

我有一个视图控制器,当用户请求将对象添加到数据库时会触发该控制器。该视图具有文本输入字段和UIPICKERVIEW。在我添加一个NSMANAGEDOBJECT来存储输入的数据之前,视图一直加载并正常工作

头文件:

    `@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;`

    `@property (strong, nonatomic) Training *trainingEvent;`
    `@property (retain, nonatomic) NSArray *eventTypes;`
还有.m

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.

self.typePicker = [[UIPickerView alloc] init];

if (self.managedObjectContext) {
    NSLog(@"managed object context loaded");
} else {
    NSLog(@"no managed object context loaded");
}

NSLog(@"event types loaded :%lu", (long unsigned)self.eventTypes.count);

if (self.trainingEvent) {
    NSLog(@"training event loaded %@", self.trainingEvent.name);
} else {
    //create new event in MOC
    NSLog(@"create new training event");
    NSEntityDescription *trainingEntityDescription = [NSEntityDescription entityForName:@"Training"
                                                                 inManagedObjectContext:self.managedObjectContext];
    Training *newTrainingEvent = (Training *)[[NSManagedObject alloc] initWithEntity:trainingEntityDescription
                                                 insertIntoManagedObjectContext:self.managedObjectContext];
    self.trainingEvent = newTrainingEvent;



}
}
当我注释掉else条款时,(在MOC中创建新事件) 风景不错。但正如我写的那样,我得到了以下错误:

`*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 0 beyond bounds for empty array'`
附加的UIPICKER方法:

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{

//cell.textLabel.text = [arrWebServiceList count] > 0 ? [arrWebServiceList objectAtIndex:indexPath.row] : @"DummyText";
NSLog(@"titleForRow %lu", (long)row);
return [self.eventTypes objectAtIndex:row];
}

-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row     forComponent:(NSInteger)component reusingView:(UIView *)view
{
    UILabel *tView = (UILabel *)view;
NSLog(@"viewForRow %lu", (long)row);
if (!tView) {
    tView = [[UILabel alloc] init];


    tView.minimumScaleFactor = 0.5;
    [tView setFont:[UIFont systemFontOfSize:12.0]];
    tView.numberOfLines = 4;
    tView.lineBreakMode = NSLineBreakByWordWrapping;
}

tView.text = [self.eventTypes objectAtIndex:row];


return tView;
}

问题:如何创建一个核心数据对象来存储数据?

以何种方式该
else
子句不起作用?你说过当你把它注释掉时会发生什么,但是当你把它放进去时会发生什么呢?当我把它放进去时,应用程序崩溃,错误
索引0超出了空数组的界限。
唯一的数组是self.eventTypes,我知道它在viewDidLoad末尾不是空的。你怎么知道它不是空的?您在哪里为它分配一些内容?在离开viewDidLoad之前,我记录self.eventType.count并获取21个对象。该数组由prepareForSegue中的上一个视图加载。另外,当我注释掉else子句时,数组在处理了一整天之后被完全填充,它所查看的数组是核心数据对象的数组,它是空的,因为我还没有保存任何数据对象。我看不出它在看那个阵列。