核心数据 - 如何将核心数据中的属性值分配给变量
Posted
技术标签:
【中文标题】核心数据 - 如何将核心数据中的属性值分配给变量【英文标题】:core data - how to assign values of an attribute in core data to a variable 【发布时间】:2013-05-31 12:06:44 【问题描述】:我正在试验核心数据,直到现在我都非常成功。我试图将核心数据值分配给一个类的变量但是我没有运气!我的实体是 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
和.m
#import "Player.h"
@implementation Player
@dynamic team;
@dynamic name;
@end
【问题讨论】:
【参考方案1】:当您创建核心数据对象的实例时,您需要将其存储在托管对象上下文中,因此 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);
【讨论】:
这是在我的 Player 实体中添加一个空对象 我不知道你的意思是什么?它返回 nil 吗? 不,它是在核心数据中添加一个新的“播放器”,这不是我想要的。它为名称插入“null”,为团队插入“null”。我正在寻找一种从核心数据中获取值并将它们分配给类的变量的方法。对不起,如果我让你感到困惑 我用一些可以获取现有播放器的代码编辑了我的答案以上是关于核心数据 - 如何将核心数据中的属性值分配给变量的主要内容,如果未能解决你的问题,请参考以下文章