我正在试验核心数据,到目前为止我一直很成功。我试图将核心数据值分配给一个类的变量,但我没有运气!我的实体是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
答案 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);