2015-01-19 1 views
0

프로그래밍 방식으로 코어 데이터 엔티티를 채우고 있습니다.코어 데이터 엔티티 작성 중의 정신 이상

나는이 같은 배열 : 형식 클래스 내부 엔티티

for (int i=0; i<[formats count]; i++) { 

    NSString *format = formats[i]; 
    Format *oneFormat = [Format formatWithString:format inManagedObjectContext:managedObjectContext]; 

    // ... bla bla 

    } 

를 채울 이제

NSArray *formats = @[ 
         @"6 x 5", 
         @"5.3 x 4.3", 
         @"4 x 3", 
         @"5 x 3.5", 
... 

나는 그것을 열거하고 나는

+ (Format *)formatWithString:(NSString *)string inManagedObjectContext:(NSManagedObjectContext *)context 
{ 

    Format *aFormat = nil; 

    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    request.entity = [NSEntityDescription entityForName:NSStringFromClass([self class]) 
           inManagedObjectContext:context]; 


    NSPredicate *predicate = [NSPredicate predicateWithFormat: 
           @"(name == %@)", string]; 

이이 문제입니다 . for 루프 내부의 한 지점에서 그때

format = @"5.3 x 4.3" 

을 가지고,이 라인은 format = @"5.3 x 4.3"Format formatWithString에 전달, 이론

Format *oneFormat = [Format formatWithString:format inManagedObjectContext:managedObjectContext]; 

실행됩니다.

Format formatWithString@"4 x 3.5" 문자열을받습니다.

무엇이 ??? 방법은 @"5.3 x 4.3"이고 @"4 x 3.5"을 받습니까?

놀라운 부분이 있습니다. 만약 내가 po predicate 내가 볼

name == "5.3 x 4.3 cm" 

그것은 올바른 값입니다. 그러나 기록이 저장되면 잘못된 값이 저장됩니다.

@"4 x 3.5"은 이전 코드에서 사용했던 형식입니다. 오타였습니다. 내 코드에서이 형식의 모든 언급을 삭제했습니다. 10 번 확인했습니다. 더 이상 @"4 x 3.5"은 없습니다.

파생 데이터를 모두 삭제했습니다. 데이터베이스를 생성 할 때마다 여기에 있어서는 안되는이 @"4 x 3.5" 항목이 들어 있습니다.

숨겨진 코어 데이터 캐시 또는 올바르게 생성 할 수있는 부분이 있습니까? 한 값으로 메소드를 호출하고 다른 값을 수신 할 수있는 방법은 무엇입니까?

답변

2
  1. 모든 것을 재설정 할 때 SQLite 파일을 삭제하지 않는 것으로 의심됩니다. iOS를 사용 중이라면 시뮬레이터 나 장치에있을 것입니다. 장치/시뮬레이션에서 앱을 삭제해도 작동합니다. OS X을 사용하고 있다면 SQLite 파일이 저장된 위치를 추적하여 삭제하십시오.

  2. 이런 식으로 업데이트/삽입 쿼리를 수행하는 것은 엄청나게 비쌉니다. 결정을 내리는 데 필요한 모든 객체를 하나씩 가져 오는 것이 좋습니다. 그렇지 않으면 실적이 좋지 않을 것입니다.

+0

# 2는 Format 클래스 내에서 변수 이름을 변경하는 아이디어를 제공하며 문제가 해결되었습니다. 감사. – SpaceDog

관련 문제