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)
听起来好像你导入了"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编译器)将不知道.
| 归档时间: |
|
| 查看次数: |
813 次 |
| 最近记录: |