我将 CoreData 与一个实体和该实体的两个属性一起使用。
实体: Binder
属性:名称、上次打开
、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
最佳答案
Xcode 有时会搞砸重建对 xcdatamodel 的更改。下次,尝试做一个干净的构建。
此外,您不应该硬核类名字符串,因为它会破坏重构。
[NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([Binder class]) inManagedObjectContext:context]
此外,为类名和托管对象添加前缀。 (例如,比 Binder 更喜欢 XYZBinder)。您将避免将来因 namespace 冲突而感到悲伤。
关于ios - CoreData - insertNewObjectForEntityForName 无法设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15706796/