2011-08-04 11 views
5

Este es el error más extraño. The internet sugiere que este es un problema con la orientación de Tiger; excepto que en realidad estoy de orientación iOS 3 y 4.Datos principales: La tienda no puede contener instancias de entidad (Error de cacao: 134020)

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

estoy añadiendo una gran cantidad de datos a la base de datos antes de que consiga este error, pero estoy ahorrando dos veces (una vez en el medio, luego de nuevo al final). Todo está bien después del primer guardado, es el segundo guardado lo 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 métodos de conveniencia que estoy pidiendo a las subclases NSManagedObject se puede encontrar here.

que tienen métodos en otras partes de la aplicación (mucho después de esto corre) que se pueden añadir/editar/borrar todas las entidades mencionadas anteriormente. El error no ocurre en la misma entidad todo el tiempo.

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

Respuesta

1

Bien, descubrí cuál era el problema.

En el código antes de lo que he publicado, solía objeto sembradora de semillas RestKit a mi base de datos de un archivo JSON locales, y luego continuó para añadir objetos después de que corrió. Pero en realidad no compromete los objetos al almacén de objetos hasta que llame al finalizeSeedingAndExit.

Calling esa función para sembrar la primera parte de mis datos, a continuación, comentando la sembradora en marcha de nuevo, fija este extraño, extraño, error.

9

tuve este error en la siguiente situación:

  • utilizo configuraciones en mi modelo CoreData. Cada entidad está asignada a una determinada configuración.
  • que añade una nueva entidad y se olvidó de asignarle a una de las configuraciones.
  • Esa parece ser la causa del error de cacao: 134020.

Después de la adición de la nueva entidad a una configuración, todo funciona bien

12

Para otras personas que se 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 fue sembrando una tienda que utiliza el mismo modelo de objeto gestionado desde un almacén existente.

El código incorrecto fue

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

En lugar hacer

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

que puede parecer redundante, pero se libró del error para mí.

+0

Gracias, esto me ayudó. No parece que lo arreglaría, pero lo hizo. Mi única conjetura es que hay un error en las entrañas de Core Data con respecto a esto. – Andrew

+0

¡Este hombre me ha ahorrado tanto tiempo, ha funcionado perfectamente! – Shizam

+0

¡Gracias por esta pista! –

Cuestiones relacionadas