Pregunta

Esta pregunta es probablemente mucho menos. No puedo averiguar los errores que estoy recibiendo en mi proyecto de datos básicos al guardar después borro una entidad.

Tengo dos entidades principales con los que trabajo, un equipo, y un artículo. Puedo crear ellos sin ningún problema, pero cuando borro Puedo obtener el registro de error siguientes:

Para el conjunto:

2009-09-22 20:17:37.771 itryiton[29027:20b] Operation could not be completed. (Cocoa error 1600.)
2009-09-22 20:17:37.773 itryiton[29027:20b]   {
    NSLocalizedDescription = "Operation could not be completed. (Cocoa error 1600.)";
    NSValidationErrorKey = outfitArticleViewProperties;
    NSValidationErrorObject = <Article: 0x12aa3c0> (entity: Article; id: 0x12b49a0 <x-coredata://7046DA47-FCE1-4E21-8D7B-E532AAC0CC46/Article/p1> ; data: {
    articleID = 2009-09-22 19:05:19 -0400;
    articleImage = 0x12b4de0 <x-coredata://7046DA47-FCE1-4E21-8D7B-E532AAC0CC46/ArticleImage/p1>;
    articleType = nil;
    attributeTitles = "(...not nil..)";
    color = nil;
    comment = nil;
    dateCreated = 2009-09-22 19:05:19 -0400;
    designer = nil;
    imageView = "(...not nil..)";
    location = "(...not nil..)";
    outfitArticleViewProperties =     (
        0x12b50f0 <x-coredata://7046DA47-FCE1-4E21-8D7B-E532AAC0CC46/OutfitArticleViewProperties/p1>
    );
    ownesOrWants = 0;
    pattern = nil;
    price = nil;
    retailer = nil;
    thumbnail = "(...not nil..)";
    washRequirements = nil;
    wearableSeasons = nil;
});
    NSValidationErrorValue =     {(
        <OutfitArticleViewProperties: 0x1215340> (entity: OutfitArticleViewProperties; id: 0x12b50f0 <x-coredata://7046DA47-FCE1-4E21-8D7B-E532AAC0CC46/OutfitArticleViewProperties/p1> ; data: {
    article = 0x12b49a0 <x-coredata://7046DA47-FCE1-4E21-8D7B-E532AAC0CC46/Article/p1>;
    articleViewPropertiesID = nil;
    outfit = nil;
    touch = nil;
    view = "(...not nil..)";
})
    )};
}

Y si elimino un artículo me sale:

2009-09-22 18:58:38.591 itryiton[28655:20b] Operation could not be completed. (Cocoa error 1560.)
2009-09-22 18:58:38.593 itryiton[28655:20b]   DetailedError: {
    NSLocalizedDescription = "Operation could not be completed. (Cocoa error 1600.)";
    NSValidationErrorKey = articleImage;
    NSValidationErrorObject = <Article: 0x12aa340> (entity: Article; id: 0x12b3f10 <x-coredata://05340FA6-B5DC-4646-A5B4-745C828C73C3/Article/p1> ; data: {
    articleID = 2009-09-22 18:58:26 -0400;
    articleImage = 0x12b4d00 <x-coredata://05340FA6-B5DC-4646-A5B4-745C828C73C3/ArticleImage/p1>;
    articleType = nil;
    attributeTitles = "(...not nil..)";
    color = nil;
    comment = nil;
    dateCreated = 2009-09-22 18:58:26 -0400;
    designer = nil;
    imageView = "(...not nil..)";
    location = "(...not nil..)";
    outfitArticleViewProperties =     (
        0x12b5010 <x-coredata://05340FA6-B5DC-4646-A5B4-745C828C73C3/OutfitArticleViewProperties/p1>
    );
    ownesOrWants = 0;
    pattern = nil;
    price = nil;
    retailer = nil;
    thumbnail = "(...not nil..)";
    washRequirements = nil;
    wearableSeasons = nil;
});
    NSValidationErrorValue = <ArticleImage: 0x12ad600> (entity: ArticleImage; id: 0x12b4d00 <x-coredata://05340FA6-B5DC-4646-A5B4-745C828C73C3/ArticleImage/p1> ; data: {
    article = 0x12b3f10 <x-coredata://05340FA6-B5DC-4646-A5B4-745C828C73C3/Article/p1>;
    image = "(...not nil..)";
});
}

Un error 1600 es:

  

NSValidationRelationshipDeniedDeleteError
  código de error para indicar alguna relación
  con la regla de eliminación NSDeleteRuleDeny es
  no vacío.

     

Disponible en Mac OS X 10.4 y posteriores.

     

declarado de CoreDataErrors.h.

Pero no puedo ver por la vida de mí, que la relación sería la prevención de la eliminación. Si algunos datos básicos asistente puede ver el error de mis maneras, estaría honrado.

No puedo marcar este resuelto, porque no soluciona realmente, pero tengo un trabajo trabajo en torno. En el .m para cada uno de mis managedObjects añadí un método que se parece a:

-(void) deleteFromManangedObjectContext{ 
   self.outfit = nil; 
   self.article = nil; 
   [[self managedObjectContext] deleteObject:self]; 
} 

Así se puede ver, en primer lugar me NIL manualmente las relaciones, y luego tengo el objeto borrarse a sí mismo. En otros objetos, en lugar de nil-ing, mi método de eliminación se llama en algunas de las relaciones de objetos, para obtener una cascada.

¿Fue útil?

Solución 3

No puedo marcar este resuelto, porque no soluciona realmente, pero tengo un trabajo trabajo en torno. En el .m para cada uno de mis managedObjects añadí un método que se parece a:

-(void) deleteFromManangedObjectContext{ 
   self.outfit = nil; 
   self.article = nil; 
   [[self managedObjectContext] deleteObject:self]; 
} 

Así se puede ver, en primer lugar me NIL manualmente las relaciones, y luego tengo el objeto borrarse a sí mismo. En otros objetos, en vez de nil-ción, mi método de eliminación se llama en algunas de las relaciones de objetos, para obtener una cascada.

Todavía estoy interesado en la respuesta "correcta". Pero esta es la mejor solución que tengo, y sí permite un cierto control preciso sobre cómo se borran mis relaciones.

Otros consejos

Sólo tenía el problema de borrado falla, y aterrizó sobre esta cuestión. Y he descubierto mi problema y pensé que me gustaría compartir eso también y tal vez alguien va a tener el mismo problema también.

El error que hice es que el objeto (A) Estoy tratando de eliminar tiene una relación con otro objeto (B) con NULL como regla de eliminación. Sin embargo, el objeto B también tienen una relación a A y es no opcional. Por lo tanto, cuando se borra Una relación de A de B se convierte en nulo que no está permitido. Cuando cambio la norma de supresión en cascada y ha funcionado.

¿Por casualidad implementar algunas de descriptor de acceso a la relación a sí mismo? Una vez tuve un código como

-(NSSet*)articles
{
       re-calculates properties....
       return [self primitiveValueForKey:@"articles"];
}

En una subclase de NSManagedObject y tenía un error de guardar. Lo que ocurrió fue que, cuando este objeto se elimina de la ManagedObjectContext, la CoreData llama a los "artículos" de descriptor de acceso para hacer frente a la propagación de eliminación. Este nuevo cálculo de los artículos se produjo durante la propagación de eliminación, que volvió a surrected los "artículos" nulos en mi caso.

Compruebe el archivo de xcdatamodel para un Deny eliminar regla. Haga clic en cada relación hasta que lo encuentres. Tendrá que cambiar esta regla o ajustar la forma de eliminar los objetos gestionados para anticipar la aplicación de la regla de la relación.

He tenido un problema similar donde resultó que el problema estaba en el archivo .xib. Cuando encendí la casilla de verificación "elimina los objetos en Eliminar" (bajo Bindings-> Set contenido) del controlador de la matriz correspondiente, el problema desapareció.

No sé si esto ayudará en su caso, pero he tenido un montón de pelos ir gris sobre los problemas que resultó ser escondidos en algún lugar dentro de Interface Builder.

En mi caso he creado inocentemente método personalizado en mi subclase de NSManagedObject: isDeleted. Me estaba encontrando extraña, salvo excepciones, hasta que me quité / le cambió el nombre. Después de perder la cordura, leí la documentación de nuevo más a través de este tiempo-completo. Resultó que se reemplaza uno de los métodos NSManagedObject uno no debe invalidar.

Compruebe si este extracto de documentos le ayuda a:

  

Métodos que no debe invalidar

     

NSManagedObject sí personaliza muchas características de NSObject por lo que   objetos gestionados pueden integrarse adecuadamente en los datos básicos   infraestructura. datos básicos se basa en la aplicación de NSManagedObject   de los métodos siguientes, que, por tanto, absolutamente no debe   anular: primitiveValueForKey :, setPrimitiveValue: forKey :,   IsEqual :, hachís, superclase, clase, auto, isProxy, isKindOfClass :,   isMemberOfClass :, conformsToProtocol :, respondsToSelector :,   managedObjectContext, entidad, IDobjeto, isInserted, isUpdated,    isDeleted , y isFault, alloc, allocWithZone :, nuevo, instancesRespondToSelector :, instanceMethodForSelector :,   methodForSelector :, methodSignatureForSelector :,   instanceMethodSignatureForSelector :, o isSubclassOfClass:.

Además - hay otros métodos que puede anular, pero usted debe llamar a un super aplicación o llama: willAccessPrimitiveForKey, didAccessPrimitiveForKey en descriptores de acceso y willChangevalueForKey, didChangeValueForKey en incubadoras ....

Recientemente he encontrado con este error porque no tenía código en el - (void) Método willSave que actualizó algunas de las propiedades del objeto administrado después de borrar -. (BOOL) ya isDeleted volvió cierto

Lo arreglé por:

- (void)willSave {
    if (![self isDeleted]) {
    //Do stuff...
    }
}

Me estaba encontrando un tema muy similar con eliminaciones en cascada, en las relaciones entre padres e hijos no opcionales. Era muy confuso porque pensé que la relación padre regla de eliminación se establece en cascada. Resulta que el editor de modelo de datos en Xcode no estaba reservándose la norma de supresión. Me gustaría ponerlo en cascada, ir a un punto de vista diferente y volver y sería establecido para anular de nuevo. Tuve que reiniciar Xcode y establecer la norma de supresión de la cascada. Después de que hice esto todo funcionaba.

Así que si alguien más se encuentra con este problema vuelva a comprobar que Xcode es el ahorro de sus normas de supresión antes de profundizar en las soluciones más complicadas.

Por cierto estoy usando datos básicos en iOS con Xcode de 5 editor de modelos de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top