2010-02-10 9 views
1

iPhone 용으로 상당히 복잡한 핵심 데이터 응용 프로그램이 있습니다. 대부분의 경우 잘 작동하지만 핵심 데이터 내에서 자체적으로 나타나는 산발적 인 문제가 발생합니다.코어 데이터 아이폰 디버깅 포인터

원격 서비스에서 데이터를 가져 오는 중, 서비스가 데이터를 반환합니다. 데이터를 구문 분석하고 다양한 관리 대상 개체를 수정합니다. 그런 다음 관리 대상 객체 컨텍스트를 저장하면 오류가 발생합니다. 나는 다음과 같은 메시지가 오류를 인쇄하는 과정에서 :
는 는 *** - [있는 UIImage 길이] : 인식 할 수없는 선택 내 내 하나 아래 하나의 세터에 내가 문제를 분리 할 수 ​​0x8cd7aa0

인스턴스에 전송 관리 사물. 설정을 사용하기 전에 관리 객체 컨텍스트를 저장하고 관리 객체 컨텍스트를 저장합니다. 실패는 바로 발생합니다.

이것은 모두 메인 스레드에서 수행됩니다. 하나 이상의 관리 대상 객체 컨텍스트가 있지만 하나의 영구 저장소 만 있습니다.

이런 종류의 핵심 데이터 문제를 디버깅하기위한 모든 포인터가 인정됩니다.

답변

0

이 특정 문제는 "get"이라는 단어가있는 관리되는 개체의 필드 이름에 해당하는 메서드로 인해 발생했습니다. 그것은 차례로 데이터베이스와 관련된 실제 문제를 가렸다.

0

동일한 문제가있어서 임시 해결책을 마련했습니다. NSManagedObject을 서브 클래스 화하고 이미지 속성에 대한 접근 자 메서드를 재정 의하여 UIImage을 수동으로 변환하십시오.

  • 는 세터 방법에서, NSData 인스턴스에 UIImage 객체를 변형하고 관리하는 오브젝트의 이미지 속성을 설정.
  • getter 메서드에서 이미지 속성의 데이터를 변환하고 UIImage의 인스턴스를 반환합니다.

의 작동하도록하자 : 데이터 모델에서

, 당신은 속성, "이미지"를 클릭하면 값 변압기 이름의 텍스트를 삭제합니다. 기본값은 입니다. NSKeyedUnarchiveFromData은 현재 원하는 것입니다.

다음으로 데이터 모델에서 엔티티의 하위 클래스를 클릭하여 새 파일을 클릭하십시오. 엔티티를 선택하면 코코아 터치 클래스에 "Managed Object Class"라는 새 클래스가 나타납니다. 을 클릭 한 다음을 클릭하고 을 다시 클릭하여 파일의 위치를 ​​그대로 둔 다음을 다시 입력 한 다음 하위 클래스로 지정할 모든 엔티티 옆에 확인 표시를하십시오.당신의 서브 클래스 NSManagedObject의 구현 파일에서

, 다음 두 가지를 포함하여 이미지 속성의 접근 자 메소드를 오버라이드 (override) : 오히려

object.image = [UIImage imageNamed:@"icon.png"]; 

:

- (void)setImage:(UIImage *)image { 
    [self willChangeValueForKey:@"image"]; 

    NSData *data = UIImagePNGRepresentation(image); 
    [self setPrimitiveValue:data forKey:@"image"]; 
    [self didChangeValueForKey:@"image"]; 
} 

- (UIImage *)image { 
    [self willAccessValueForKey:@"image"]; 
    UIImage *image = [UIImage imageWithData:[self primitiveValueForKey:@"image"]]; 
    [self didAccessValueForKey:@"image"]; 
    return image; 
} 

을 그런 다음 이미지 사용을 설정할 때마다 이상 :

[object setValue:[UIImage imageNamed:@"icon.png"] forKey:@"image"]; 

이미지 사용 :

UIImage *myImage = object.image; 

보다는 :

UIImage *myImage = [object valueForKey:@"image"];