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

后端 未结 8 608
温柔的废话
温柔的废话 2021-02-05 08:29

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

相关标签:
8条回答
  • 2021-02-05 08:37

    Looks to me like Title attribute may not be set to string. Have you check that?

    Usually, unrecognized selector sent to instance is a runtime error cause by sending a message to an object that the object doesn't know how to handle.

    Subscriptions *sbs = (Subscriptions *)[NSEntityDescription insertNewObjectForEntityForName:@"Subscriptions" inManagedObjectContext:context];
    sbs.Title = @"OK";
    

    Hope that help

    I made simple project here.

    0 讨论(0)
  • 2021-02-05 08:40

    I was getting this, and did a Clean on the project and it fixed it.

    0 讨论(0)
  • 2021-02-05 08:41

    take the following steps

    1) created a new version of the Core Data Model via Xcode.

    2) Fix the relationship (added a new relationship between the two. )

    Creating Managed Object Relationships

    3) re-created the NSManagedObject subclass

    0 讨论(0)
  • 2021-02-05 08:45

    I had the same problem and I found a not-so-elegant solution. It seems that

    [NSEntityDescription insertNewObjectForEntityForName:@"myEntity" inManagedObjectContext:myManagedObjectContext];
    

    creates an old version of myEntity that does not have the attributes of the most up-to-date version. So I changed the name of myEntity in the old version of the model to myEntityOld and I did not get the error any more.

    I suspect that there is an elegant way to do the same thing in XCode by setting a property of NSManagedObject or NSEntityDescription.

    0 讨论(0)
  • 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

    0 讨论(0)
  • 2021-02-05 08:56

    I added an attirbute to a Core Data entity, and instead of re-creating the NSManagedObjectSubclass, I tried to get fancy and manually add the @property and @dynamic to the existing subclass.

    That didn't work, so I went and re-created the subclass through XCode, which is when I started getting this error ("unrecognized selector sent to instance" when setting a value for the attribute).

    So I created a new version of the Core Data Model via XCode, then cleaned, deleted derived data, and then re-created the NSManagedObject subclass. That worked.

    It was probably creating a new data model and the new subclass based on that, so I probably didn't need to clean or delete derived data...but it didn't hurt, either!

    0 讨论(0)
提交回复
热议问题