문제

이 질문은 아마도 긴 기회 일 것입니다. 엔티티를 삭제 한 후 저장할 때 핵심 데이터 프로젝트에 들어가는 오류를 알 수 없습니다.

내가 함께 일하는 두 가지 주요 단체, 복장과 기사가 있습니다. 문제없이 만들 수 있지만 삭제하면 다음 오류 로그를 얻습니다.

복장의 경우 :

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..)";
})
    )};
}

그리고 기사를 삭제하면 다음을받습니다.

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..)";
});
}

1600 오류는 다음과 같습니다.

NSValidationRelationShipDeniedDeleteError
어떤 관계를 나타내는 오류 코드
삭제 규칙을 사용하여 NSDELETLELEDENY는입니다
비어 있지 않습니다.

Mac OS X V10.4 이상에서 제공됩니다.

CoreDataErrors.h에서 선언되었습니다.

그러나 나는 어떤 관계가 삭제를 막을지를 볼 수 없습니다. 일부 핵심 데이터 마법사가 내 방식의 오류를 볼 수 있다면 겸손 할 것입니다.

나는 그것을 해결하지 못했기 때문에 이것을 해결할 수는 없지만, 작업 작업이 있습니다. 에서 .m 내 각각 managedObjects 다음과 같은 방법을 추가했습니다.

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

그래서 먼저, 먼저 관계를 수동으로 나눈 다음 객체가 삭제됩니다. 다른 대상에서는 대신 nil-ing, 내 삭제 방법은 일부 객체 관계에서 호출되어 캐스케이드를 얻습니다.

도움이 되었습니까?

해결책 3

나는 그것을 해결하지 못했기 때문에 이것을 해결할 수는 없지만, 작업 작업이 있습니다. 각 ManagedObjects에 대해 .m에서 다음과 같은 방법을 추가했습니다.

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

그래서 먼저, 먼저 관계를 수동으로 나눈 다음 객체가 삭제됩니다. 다른 객체에서는 nil-ing 대신 내 삭제 방법이 일부 객체 관계에서 호출되어 캐스케이드를 얻습니다.

나는 여전히 "올바른"대답에 관심이 있습니다. 그러나 이것은 내가 가진 최상의 솔루션이며, 내 관계가 어떻게 삭제되는지에 대한 세밀한 제어를 허용합니다.

다른 팁

방금 삭제 실패의 문제가 있었고이 질문에 착륙했습니다. 그리고 나는 내 문제를 알아 내고 나도 그것을 공유 할 것이라고 생각했고 아마도 누군가도 같은 문제를 겪을 것이라고 생각했습니다.

내가 저지른 실수는 삭제하려는 객체 (a) 삭제 규칙으로 null을 가진 다른 객체 (b)와 관계가 있다는 것입니다. 그러나 객체 B는 또한 A와 관계가 있으며 비 옵션입니다. 따라서 A를 삭제하면 B의 A의 관계가 허용되지 않는 Null이됩니다. 삭제 규칙을 캐스케이드로 변경하면 효과가있었습니다.

관계에 대한 액세서 중 일부를 직접 구현합니까? 한 번은 코드가있었습니다

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

nsmanagedObject의 서브 클래스에서 저장 오류가있었습니다. 이 객체가 ManagedObjectContext에서 삭제되면 Coredata는 삭제 전파를 처리하기 위해 액세서를 "기사"로 호출했습니다. 이 기사의 재 계산은 삭제 전파 중에 발생했으며,이 경우 내 경우에는 무효화 된 "기사"를 다시 배열했습니다.

당신을 확인하십시오 xcdatamodel a Deny 규칙을 삭제하십시오. 찾을 때까지 각 관계를 클릭하십시오. 이 규칙을 변경하거나 관리 된 개체를 삭제하여 규칙의 관계에 대한 적용을 예상하는 방법을 조정해야합니다.

문제가 .xib 파일에있는 것으로 밝혀진 비슷한 문제가있었습니다. 관련 배열 컨트롤러의 "remove on remove on re-bindings-> 컨텐츠 세트)의 확인란을 켜면 문제가 사라졌습니다.

이것이 당신의 경우에 도움이 될지 모르겠지만, 나는 인터페이스 빌더 내부 어딘가에 숨겨져있는 문제에 대해 많은 머리카락이 회색으로 갔다.

제 경우에는 nsmanagedObject : isdeleted의 서브 클래스에서 무고하게 사용자 정의 메소드를 만들었습니다. 내가 삭제 / 이름을 변경할 때까지 이상한 저장 예외를 발견했습니다. 내 정신을 잃은 후, 나는 이번에는 문서를 다시 한 번 더 읽었다. 그것은 내가 비난해서는 안되는 nsmanagedObject 방법 중 하나를 무시한 것으로 나타났습니다.

문서에서 발췌 한 내용이 도움이되는지 확인하십시오.

당신이 무시해서는 안됩니다

nsmanagedObject 자체는 nsObject의 많은 기능을 사용자 정의하여 관리되는 객체가 핵심 데이터 인프라에 올바르게 통합 될 수 있도록합니다. 핵심 데이터는 nsmanagedObject의 다음 방법을 구현하는 데 의존하므로 절대적으로 무시해서는 안됩니다. PrimitiveValueforkey :, setPrimitiveValue : Forkey :, Isequal :, Hash, Superclass, Class, Self, Isproxy, Iskindofclass :, ismemberofclass :, conformstoprotocol :, responstStoselector :, managedObjectContext, Entity, 객체, IsUpdated, IsUpdated, isdeleted, and insfault, alloc, allocwithzone :, new, instancesrespondToSelector :, instancemethodforselector :, methodforselector :, methodsIngatureForSelector :, instancemethodsignatureForselector :, 또는 issubclassofclass :.

게다가 - 재정의 할 수있는 다른 방법이 있지만 다음과 같은 수퍼 구현에 전화해야합니다. willAccessPrimitiveForKey, didAccessPrimitiveForKey 접근자와 willChangevalueForKey, didChangeValueForKey 세터에서 ....

(void) Willsave 메소드에 코드가 있었기 때문에 최근 에이 오류가 발생했습니다.

나는 그것을 다음과 같이 고쳤다 :

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

비 선택적 부모-자식 관계에서 계단식 삭제와 매우 유사한 문제를 겪고있었습니다. 부모 관계 삭제 규칙이 캐스케이드로 설정되었다고 생각했기 때문에 매우 혼란 스러웠습니다. Xcode의 데이터 모델 편집기가 삭제 규칙을 저장하지 않은 것으로 나타났습니다. 나는 그것을 캐스케이드로 설정하고, 다른 시야로 가서 돌아와서 다시 Nullify로 설정 될 것입니다. Xcode를 다시 시작하고 삭제 규칙을 캐스케이드로 설정해야했습니다. 내가 이것을 한 후에 모든 것이 효과가있었습니다.

따라서 다른 사람 이이 문제에 직면하면 Xcode가 더 복잡한 솔루션을 탐구하기 전에 Xcode가 삭제 규칙을 저장하고 있는지 확인하십시오.

그건 그렇고 Xcode 5의 데이터 모델 편집기를 사용하여 iOS에서 핵심 데이터를 사용하고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top