3

4 つのエンティティを持つコア データ モデルがあります。エンティティPlayerには、他のエンティティ ( ) との対多関係がありPlayer_Scores,Custom_Exercise,Selected_Exerciseます。

アプリ デリゲートでNSManagedObjectContext,NSManagedObjectModel,NSPersistentStoreCoordinatorは、標準的な方法でプロパティを作成します。次に、別のビュー コントローラーで、@interface でNSManagedObjectContextオブジェクトとnewPlayerPlayer エンティティの ivar を宣言します

@interface NewProfileViewController()
{
    NSManagedObjectContext *context;
    Player *newPlayer;
}

次に、アクションで、次のコードを使用して Player エンティティを作成し、その属性、およびエンティティとエンティティを入力しPlayer_ScoresますSelected_Exercise。私が使用するコードは、Player_Scoresおよび Player エンティティの属性を正常に追加します。ただし、ループに 16 個Selected_Exerciseのエンティティを追加してそれらの属性を設定しようとすると、「前方クラス オブジェクトにプロパティが見つかりませんか?」という大きなエラーが発生します。ヘルプ!!!!!私が言ったように、コードは forSelected_Exerciseと for で同じですPlayer_Scores。私はすでに再起動、データベースの削除などを試みました。やろうとしたときにポップアップするのはコンパイルエラーですnewEx.exercise=@"blahblahblah";newEx.suit=@"blahblahblah";

以下は、そのメソッドの私のコードです。

     //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]);
    }
4

1 に答える 1

5

そのファイルに「Player.h」をインポートしたように聞こえますが、「Selected_Exercise.h」はインポートしていません。

「Player.h」にはおそらく前方宣言が含まれている@class Selected_Exerciseため、コンパイラは文句を言いません

Selected_Exercise *newEx = [NSEntityDescription ...

ただし、「Selected_Exercise.h」がインポートされていない場合、そのクラスのプロパティ ( など newEx.exercise) はコンパイラに認識されません。

于 2013-04-18T06:54:58.573 に答える