0

我正在试验核心数据,直到现在我都非常成功。我试图将核心数据值分配给一个类的变量但是我没有运气!我的实体是 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:** * ** * ** * ** * ** 这是我的 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

还有他们

#import "Player.h"


@implementation Player

@dynamic team;
@dynamic name;


@end
4

1 回答 1

0

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

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

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

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

编辑:

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

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

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

Player *player = playerArray[0];
NSLog(@"team: %@", player.team);
NSLog(@"name: %@", player.name);
于 2013-05-31T12:11:16.460 回答