我正在使用CoreData为该实体提供一个实体和两个属性
实体:Binder
属性:名称,lastOpened
,br>
我能够毫无问题地插入实体的新对象,我也可以设置它的名称,但是我无法设置它的lastOpened属性。
这是我的代码:
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 :(得分:1)
Xcode偶尔会重建对xcdatamodel的更改。下次,尝试做一个干净的构建。
另外,你不应该硬编别类名字符串,因为它会破坏重构。
[NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([Binder class]) inManagedObjectContext:context]
此外,为类名和托管对象添加前缀。 (例如,喜欢XYZBinder只是Binder)。您将避免将来对命名空间冲突感到悲伤。
答案 1 :(得分:0)
您可能已在项目中加载了另一个名为Binder的类。尝试将CoreData实体的类名设置为类似于XCode中的BinderMO并重新创建类文件。
答案 2 :(得分:0)
我不确定问题是什么,但我删除了我的Binder.h / .m文件并重新创建它们,现在它可以工作了。旧的和新的之间的唯一区别是&#39; name&#39;并且&#39; lastOpened&#39;转换的地方。谢谢你的帮助。
New 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
New Binder.m:
#import "Binder.h"
#import "Cards.h"
@implementation Binder
@dynamic lastOpened;
@dynamic name;
@dynamic cards;
@end