当添加关系对象w /核心数据获取"在前向类对象中找不到属性"错误

ire*_*les 3 entity core-data objective-c relationship

我有一个包含四个实体的核心数据模型.该实体Player与其他实体(Player_Scores,Custom_Exercise,Selected_Exercise)具有to-Many关系.

在我的app委托中,我以NSManagedObjectContext,NSManagedObjectModel,NSPersistentStoreCoordinator标准方式创建属性.然后,在一个不同的视图控制器中,我在@interface中为一个NSManagedObjectContext对象和一个newPlayerPlayer实体声明了ivars :

@interface NewProfileViewController()
{
    NSManagedObjectContext *context;
    Player *newPlayer;
}
Run Code Online (Sandbox Code Playgroud)

然后在一个动作中我有以下代码来创建一个Player实体并输入它的属性,以及一个Player_Scores实体和一个Selected_Exercise实体.我使用的代码成功添加Player_Scores了Player实体的属性.然而,当我尝试Selected_Exercise在循环中添加16个实体并设置它们的属性时,我得到一个很大的" 在前向类对象上找不到属性? "错误.救命!!!!!就像我说的代码是相同的for Selected_Exercise和for Player_Scores.我已经尝试重新启动,删除数据库等.这是我尝试做newEx.exercise=@"blahblahblah";newEx.suit=@"blahblahblah";UGH 时弹出的编译器错误

以下是该方法的代码:

     //1. save a person to database
        newPlayer=[NSEntityDescription
                           insertNewObjectForEntityForName:@"Player"
                           inManagedObjectContext:context];

        newPlayer.name=newentry;
        //NSError *error; [context save:&error];

        //2. begin making a score card:
        Player_Scores *newScoreCard = [NSEntityDescription
                               insertNewObjectForEntityForName:@"Player_Scores"
                               inManagedObjectContext:context];

        newScoreCard.date_of_game = [NSDate date];
        newScoreCard.player=newPlayer; //attach this score card to the new playe
        [newPlayer addScoresObject:newScoreCard];//add the score card to the newplayer
        //3.  make selected_exercise

        NSString *plistCatPath = [[NSBundle mainBundle] pathForResource:@"ListOfExercises" ofType:@"plist"]; //grab plist
        NSMutableArray* theDictArray= [[NSMutableArray arrayWithContentsOfFile:plistCatPath] copy];

        for(int cnt=0;cnt<[theDictArray count];cnt++){

            Selected_Exercise *newEx= [NSEntityDescription
                                       insertNewObjectForEntityForName:@"Selected_Exercise"
                                       inManagedObjectContext:context];
            newEx.exercise=[[theDictArray objectAtIndex:cnt]valueForKey:@"exercise"];
            newEx.suit=[[theDictArray objectAtIndex:cnt]valueForKey:@"suit"];
            [newPlayer addSelected_exerciseObject:newEx];
            NSLog(@"added exercise %@ for suit %@ at array index %d",[[theDictArray objectAtIndex:cnt]valueForKey:@"exercise"],[[theDictArray objectAtIndex:cnt]valueForKey:@"suit"],cnt);
        }
    // Save everything
    NSError *error = nil;
    if ([context save:&error]) {
        NSLog(@"The save was successful!");
    } else {
        NSLog(@"The save wasn't successful: %@", [error userInfo]);
    }
Run Code Online (Sandbox Code Playgroud)

Mar*_*n R 5

听起来好像你导入了"Player.h",但没有导入该文件中的"Selected_Exercise.h".

"Player.h"可能包含前向声明@class Selected_Exercise,因此编译器不会抱怨

Selected_Exercise *newEx = [NSEntityDescription ...
Run Code Online (Sandbox Code Playgroud)

但是,如果未导入"Selected_Exercise.h",则该类的属性(例如 newEx.exercise编译器)将不知道.