Datos básicos: el almacén no puede contener instancias de entidad (Error de cocoa: 134020)

Este es el error más extraño. Internet sugiere que este es un problema al apuntar a Tiger; excepto que en realidad estoy apuntando a iOS 3 y 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-conetworkingata:///PartRecommendation/tAE2B5BA2-44FD-4B62-95D7-5B86EBD6830014> ; data: { "_rkManagedObjectSyncStatus" = 0; name = "Thin canopy cover"; part = nil; partRecommendationId = 6; partType = "0x6a07f40 <x-conetworkingata:///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 pnetworkingicates (\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 pnetworkingicates (\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 pnetworkingicates (\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 pnetworkingicates (\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 pnetworkingicates (\n), warnings (\n), versionHashModifier (null), destination entity PartType, inverseRelationship partRecommendations, minCount 1, maxCount 1"; }, subentities { }, userInfo { }, versionHashModifier (null)} 

Estoy agregando una gran cantidad de datos a Core Data antes de get este error, pero estoy ahorrando dos veces (una vez en el medio, luego otra vez al final). Todo está bien después del primer guardado, es el segundo guardado que está causando el problema, así que publicaré el código que estoy usando después del primero pero antes del segundo.

 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; } } 

Los methods de conveniencia con los que invoco las subclasss NSManagedObject se pueden encontrar aquí .

Tengo methods en otra parte de la aplicación (mucho después de esto se ejecuta) que pueden agregar / editar / eliminar todas las entidades a las que se hace reference anteriormente. El error no ocurre en la misma entidad cada vez.

¡Cualquier ayuda sería muy apreciada! Esto es difícil.

Para otras personas que encuentran esta página a través de Google: Tuve un problema similar con una causa no relacionada con la solución anterior.

El código que provocó el error estaba sembrando una tienda que usaba el mismo model de object gestionado de una tienda existente.

El código incorrecto fue

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

En lugar de hacer

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

que puede parecer networkingundante, pero me deshice del error.

Tuve este error en la siguiente situación:

  • Utilizo configuraciones en mi Modelo CoreData. Cada entidad está asignada a una determinada configuration.
  • Agregué una nueva entidad y olvidé asignarla a una de las configuraciones.
  • Eso parece causar el error de cocoa: 134020.

Después de agregar la nueva entidad a una configuration, todo funciona bien

De acuerdo, descubrí cuál era el problema.

En el código anterior a lo que publiqué, utilicé el object de sembradora de RestKit para inicializar mi database desde un file json local, y luego continué agregando objects después de que se ejecutó. Pero en realidad no compromete los objects en el almacén de objects hasta que llame a finalizeSeedingAndExit .

Llamar a esa function para sembrar la primera parte de mis datos, luego comentar la sembradora y volver a ejecutar, solucionó este extraño y extraño error.