核心数据 - 如何将核心数据中的属性值分配给变量

时间:2013-05-31 12:06:45

标签: ios core-data

我正在试验核心数据,到目前为止我一直很成功。我试图将核心数据值分配给一个类的变量,但我没有运气!我的实体是Player,属性是Team和Name。我想将属性的值分配给Athlete类的变量,然后将这些变量分配给控制器中的标签。我目前只有一名玩家拥有核心数据。我尝试创建实体的NSManagedObject子类(从这里阅读答案,但没有运气)。

这就是我的尝试;

Athlete * myAthlete = [Athlete alloc];
Player * corePlayer = [Player alloc];
myAthlete.name = corePlayer.name;

NSLog(@"Player name %@",myAthlete.name);

这就是错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Player name]: unrecognized selector sent to instance 0x832d960'

我提前道歉,因为我确定我一起接近错误的方式 - 我想这是学习的一部分。

感谢。

** * ** * ** * EDIT1: ** * ** * ** * < / EM> ** * ** 这是我的NSManagedObject类

//  Player.h



#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>


@interface Player : NSManagedObject

@property (nonatomic, retain) NSString * team;
@property (nonatomic, retain) NSString * name;


@end

和.m

#import "Player.h"


@implementation Player

@dynamic team;
@dynamic name;


@end

1 个答案:

答案 0 :(得分:0)

创建核心数据对象的实例时,需要将其存储在托管对象上下文中,因此alloc / init将不起作用。

您可以像这样创建一个新的播放器实例:

Player *newPlayer = [NSEntityDescription insertNewObjectForEntityForName:@"Player" inManagedObjectContext:myManagedObjectContext];

您获得的异常是因为Player实体上没有name属性,这可能与初始化有关但可能是一个不同的问题,您也应该发布这些类的详细信息。

编辑:

确定以获取现有对象,您需要从托管对象上下文中找到它,而不是创建新对象。因此,给定一个包含一个Player的托管对象上下文,此代码将获取一个包含一个播放器对象的数组:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Player"];
NSArray *playerArray = [managedObjectContext executeFetchRequest:request error:&error];

然后访问属性只需获取播放器对象:

Player *player = playerArray[0];
NSLog(@"team: %@", player.team);
NSLog(@"name: %@", player.name);