2013-03-29 31 views
1

我正在使用CoreData与该实体的一个实体和两个属性。
实体:粘合剂
属性:名称,lastOpened
,BR> 我能够插入实体的一个新的对象没有问题,而且我还可以设置它的名字,但我不能设置它的lastOpened属性。
这里是我的代码:
CoreData - insertNewObjectForEntityForName不能设置属性

Binder *newBinder = [NSEntityDescription insertNewObjectForEntityForName:@"Binder" inManagedObjectContext:context]; 
[newBinder setName:@"Binder"]; 
[newBinder setLastOpened:[NSDate date]]; //Tried this first 
newBinder.lastOpened = [NSDate date]; //No compiler warning either 

然而,当我运行应用程序,我得到的-[Binder setLastOpened:]: unrecognized selector sent to instance 0x9688870

一个错误,我可以确认所显示的内存地址实际上是正确的Binder对象。任何想法,为什么我可以设置一个属性,但不是另一个?谢谢。
Binder.h:

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

@class Cards; 

@interface Binder : NSManagedObject 

@property (nonatomic, retain) NSString * name; 
@property (nonatomic, retain) NSDate * lastOpened; 
@property (nonatomic, retain) NSSet *cards; 
@end 

@interface Binder (CoreDataGeneratedAccessors) 

- (void)addCardsObject:(Cards *)value; 
- (void)removeCardsObject:(Cards *)value; 
- (void)addCards:(NSSet *)values; 
- (void)removeCards:(NSSet *)values; 

@end 

Binder.m:

#import "Binder.h" 
#import "Cards.h" 


@implementation Binder 

@dynamic name; 
@dynamic lastOpened; 
@dynamic cards; 

@end 
+0

似乎你的模型没有'lastOpened'这样的属性。打印您的管理对象模型并检查。 –

回答

1

Xcode中偶尔糊里糊涂了重建的变化xcdatamodel。下一次,尝试做一个干净的构建。

此外,你不应该核心类名字符串,因为它会破坏重构。

[NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([Binder class]) inManagedObjectContext:context] 

另外,为类名和管理对象添加一个前缀。 (例如,喜欢XYZBinder只是活页夹)。您将避免未来命名空间碰撞的悲伤。

+0

感谢这个答案Lorean,它真的帮了我。但是,每次我重建应用程序时,我都需要执行Clean and Clean Build。任何想法如何我可以永久解决这个问题? –

0

您可能已经加载在您的项目命名为粘结剂另一个类。尝试将您的CoreData实体的类名设置为XCode中的BinderMO,并重新创建类文件。

0

我不知道是什么问题,但我删除了我的Binder.h/.m文件并重新创建它们,现在它可以工作。旧的和新的唯一的区别是'名字'和'lastOpened'交换位置。谢谢您的帮助。

新Binder.h:

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

@class Cards; 

@interface Binder : NSManagedObject 

@property (nonatomic, retain) NSDate * lastOpened; 
@property (nonatomic, retain) NSString * name; 
@property (nonatomic, retain) NSSet *cards; 
@end 

@interface Binder (CoreDataGeneratedAccessors) 

- (void)addCardsObject:(Cards *)value; 
- (void)removeCardsObject:(Cards *)value; 
- (void)addCards:(NSSet *)values; 
- (void)removeCards:(NSSet *)values; 

@end 

新Binder.m:

#import "Binder.h" 
#import "Cards.h" 


@implementation Binder 

@dynamic lastOpened; 
@dynamic name; 
@dynamic cards; 

@end