CoreData issue: -[NSManagedObject setValue:]: unrecognized selector sent to instance

Olsi picture Olsi · Dec 28, 2010 · Viewed 25.8k times · Source

I just started with CoreData yesterday, and I'm going crazy :( I created a project that uses CoreData (ticked the box -use CoreData). Created the entities, and then created the NSManagedObject classes for all the entities (I suppose they create the 'setter' and 'getter' methods for the entities).

Now, I #imported all these classes in my AppDeletegate and wrote this in my applicationDidFinishLaunching method:

(Subscriptions is one of the Entities in the application)

NSManagedObjectContext *context = [self managedObjectContext];
 Subscriptions *sbs = (Subscriptions *)[NSEntityDescription insertNewObjectForEntityForName:@"Subscriptions" inManagedObjectContext:context];
 [sbs setTitle:@"OK"];
 [sbs setType:@"Tag"];
 [sbs setCode:@"cars"];

 NSError *error = nil;
 if (![context save:&error]) {
  NSLog(@"Couldn't create the subscription");
 }

When I run this, I get this error

[NSManagedObject setTitle:]: unrecognized selector sent to instance 0x6160550

I have no idea why this is happening. Please Help!!! Thanks in advance to everyone!

Adding the header of Subscriptions
Subscriptions.h

@interface Subscriptions : NSManagedObject {
}
@property (nonatomic, retain) NSString * Type;
@property (nonatomic, retain) NSDecimalNumber * Read;
@property (nonatomic, retain) NSString * Title;
@property (nonatomic, retain) NSString * Code;
@property (nonatomic, retain) NSDecimalNumber * New;
@end

I didn't change anything. It's just as Xcode created it.

Answer

b123400 picture b123400 · Jan 16, 2011

Just to remind that, don't use capitalized variable name, it might affects the getters and setters not working properly.

If you generated your NSManagedObject subclasses from the data model, everything should goes fine, although it is @dynamic, setters are be implemented by coredata, and because they are already implemented, you should not change it to synthesize. At least for me, coredata returns empty object after I change @dynamic to @synthesize.

And don't forget to set the class name in the data model:

enter image description here