Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Core Data: Store cannot hold instances of entity (Cocoa Error: 134020)

This is the strangest error. The internet suggests that this is an issue with targeting Tiger; except that I'm actually targeting iOS 3 and 4.

Error Domain=NSCocoaErrorDomain Code=134020 "The operation couldn\u2019t be completed. (Cocoa error 134020.)" UserInfo=0xc502350 {NSAffectedObjectsErrorKey=<PartRecommendation: 0x6a113e0> (entity: PartRecommendation; id: 0x6a0d0e0 <x-coredata:///PartRecommendation/tAE2B5BA2-44FD-4B62-95D7-5B86EBD6830014> ; data: {
    "_rkManagedObjectSyncStatus" = 0;
    name = "Thin canopy cover";
    part = nil;
    partRecommendationId = 6;
    partType = "0x6a07f40 <x-coredata:///PartType/tAE2B5BA2-44FD-4B62-95D7-5B86EBD683003>";
}), NSUnderlyingException=Store <NSSQLCore: 0x5f3b4c0> cannot hold instances of entity (<NSEntityDescription: 0x6d2e5d0>) name PartRecommendation, managedObjectClassName PartRecommendation, renamingIdentifier PartRecommendation, isAbstract 0, superentity name PartOption, properties {
    "_rkManagedObjectSyncStatus" = "(<NSAttributeDescription: 0x6d37550>), name _rkManagedObjectSyncStatus, isOptional 0, isTransient 0, entity PartRecommendation, renamingIdentifier _rkManagedObjectSyncStatus, validation predicates (\n), warnings (\n), versionHashModifier (null), attributeType 100 , attributeValueClassName NSNumber, defaultValue 0";
    name = "(<NSAttributeDescription: 0x6d37c10>), name name, isOptional 1, isTransient 0, entity PartRecommendation, renamingIdentifier name, validation predicates (\n), warnings (\n), versionHashModifier (null), attributeType 700 , attributeValueClassName NSString, defaultValue (null)";
    part = "(<NSRelationshipDescription: 0x6d2e660>), name part, isOptional 1, isTransient 0, entity PartRecommendation, renamingIdentifier part, validation predicates (\n), warnings (\n), versionHashModifier (null), destination entity Part, inverseRelationship recommendation, minCount 1, maxCount 1";
    partRecommendationId = "(<NSAttributeDescription: 0x6d2e6d0>), name partRecommendationId, isOptional 1, isTransient 0, entity PartRecommendation, renamingIdentifier partRecommendationId, validation predicates (\n), warnings (\n), versionHashModifier (null), attributeType 100 , attributeValueClassName NSNumber, defaultValue 0";
    partType = "(<NSRelationshipDescription: 0x6d2e720>), name partType, isOptional 1, isTransient 0, entity PartRecommendation, renamingIdentifier partType, validation predicates (\n), warnings (\n), versionHashModifier (null), destination entity PartType, inverseRelationship partRecommendations, minCount 1, maxCount 1";
}, subentities {
}, userInfo {
}, versionHashModifier (null)}

I'm adding a lot of data to Core Data before I get this error, but I'm saving twice (once in the middle, then again at the end). Everything is fine after the first save, it's the second save that is causing the problem, so I'll post the code that I'm using after the first but before the second.

Landscape *landscape = [Landscape object];

Type *type = [Type object];
type.name = @"tree";

MeasurementType *caliperType = [MeasurementType object];
MeasurementType *heightType = [MeasurementType object];

InventoryTree *inventoryTree = [InventoryTree object];
inventoryTree.landscape = landscape;
inventoryTree.type = type;

Assessment *assessmentTree = [Assessment object];
assessmentTree.inventoryItem = inventoryTree;
assessmentTree.type = type;
[[inventoryTree mutableSetValueForKeyPath:@"assessments"] addObject:assessmentTree];

Measurement *caliper = [Measurement object];
Measurement *height = [Measurement object];
caliper.type = caliperType;
height.type = heightType;
[[assessmentTree mutableSetValueForKey:@"measurements"] addObjectsFromArray:[NSArray arrayWithObjects:caliper, height, nil]];

for (PartType *pType in [PartType allObjects]) {
    pType.type = type;
        Part *treePart = [Part object];
        treePart.partType = pType;
        [[assessmentTree mutableSetValueForKey:@"parts"] addObject:treePart];
        for (PartCondition *cond in pType.partConditions) {
            cond.partType = pType;
        }
        for (PartRecommendation *rec in pType.partRecommendations) {
            rec.partType = pType;
        }
}

The convenience methods I'm calling on NSManagedObject subclasses can be found here.

I have methods elsewhere in the app (long after this runs) that can add/edit/delete all of the entities referenced above. The error doesn't occur on the same entity every time.

Any help would be greatly appreciated! This is a tricky one.

like image 950
Evan Cordell Avatar asked Aug 04 '11 18:08

Evan Cordell


3 Answers

I had this error in the following situation:

  • I use configurations in my CoreData Model. Each entity is assigned to a certain configuration.
  • I added a new entity and forgot to assign it to one of the configurations.
  • That seems to cause the Cocoa Error: 134020.

After adding the new entity to a configuration, everything works fine

like image 152
Frank Müller Avatar answered Oct 23 '22 11:10

Frank Müller


For other people that find this page via Google:I had a similar problem with a cause unrelated to the solution above.

The code that triggered the error was seeding a store that used the same managed object model from an existing store.

The wrong code was

NSManagedObject *newObj = [[NSManagedObject alloc] initWithEntity:[obj entity] insertIntoManagedObjectContext:moc]

Instead do

NSManagedObject *newObj = [[NSManagedObject alloc] initWithEntity:[NSEntityDescription entityForName:obj.entity.name inManagedObjectContext:moc] insertIntoManagedObjectContext:moc]

which may seem redundant, but got rid of the error for me.

like image 22
mrueg Avatar answered Oct 23 '22 11:10

mrueg


Okay, I discovered what the problem was.

In the code before what I posted, I used RestKit's seeder object to seed my database from a local json file, and then I continued to add objects after it ran. But it doesn't actually commit the objects to the object store until you call finalizeSeedingAndExit.

Calling that function to seed the first part of my data, then commenting out the seeder and running again, fixed this strange, strange, error.

like image 1
Evan Cordell Avatar answered Oct 23 '22 12:10

Evan Cordell