2011-09-05 9 views
0

나는 5000 개의 지구와 도시가있다. 5000 군데를 coredata에 넣으려고합니다. 각 지구에는 도시가 있으며 각 도시에는 많은 지구가있을 수 있습니다. 나는 2 개의 실체, 즉 지구와 도시 쌍을 가지고있다. 어떻게 그렇게 효율적으로 할 수 있습니까?개체를 만들고 coredata를 올바르게 사용하는 방법?

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

    int index; 
    for (int j=0; j<[[IndonesiaDistrictToSave objectAtIndex:i] length]; j++) { 
     if([[IndonesiaDistrictToSave objectAtIndex:i] characterAtIndex:j]==','){ 
      index=j; 
     } 
    } 

    NSString * DistrictName=[[IndonesiaDistrictToSave objectAtIndex:i] substringToIndex:index]; 
    NSString * CityName=[[IndonesiaDistrictToSave objectAtIndex:i] substringFromIndex:index+1]; 

    District * theDistrict = (District *)[GrabClass getObjectWithStringOfValue:DistrictName fromTable:@"District" withAttribut:@"Name"]; 
    theDistrict.City= (City *)[GrabClass getObjectWithStringOfValue:CityName fromTable:@"City" withAttribut:@"Name"]; 
} 

getObjectWithStringOfValue 개체가 이미 그것을 반환 존재하는 경우 조회하는 방법이지만, 오브젝트가 존재하지 않을 경우, 그것은 그때 새로운 하나를 만들 수 있으며, 그것을

를 반환 할 것 이 코드를 사용하여 모든 인도네시아 지역을 저장하면 4500 개 이상의 구역이 있습니다. 시간 간격을 사용하면 각 구역마다 0.013773이되지만 느려지므로 어떻게 빨리 처리 할 수 ​​있습니까?

검색 결과의 mutablearray 프록시를 가져 오는 방법이 있습니까?

+1

'-get *'으로 시작하는 함수의 특별한 사용법이 있습니다. 다른 접두사를 사용하는 것이 좋습니다. –

+0

Alexsander가 맞습니다. 우리는 ManagedObject 서브 클래스에 -get * 및 -add * 접두사가 붙은 메소드를 사용했을 때 큰 어려움에 처했습니다. – vikingosegundo

답변

1

엔티티를 SQL 테이블이라고 생각하기 때문에 가져 오기가 효율적으로 설정되었는지 의심 스럽습니다.

핵심 데이터가 SQL이 아닙니다. 엔티티는 테이블이 아닙니다. 객체는 행이 아닙니다. 속성은 열이 아닙니다. 관계는 조인이 아닙니다. 핵심 데이터는 객체 그래프 관리 시스템으로 객체 그래프를 유지할 수도 있고 유지하지 않을 수도 있으며 그렇게하기 위해 SQL을 사용할 수도 있고 사용하지 않을 수도 있습니다. 코어 데이터를 SQL 용어로 생각하면 코어 데이터를 완전히 오해하여 많은 슬픔과 시간 낭비를 초래할 수 있습니다.

조회 할 잠재적 인 속성 값이있는 경우 술어에서 IN 연산자를 사용하여 모든 일치 항목을 찾으십시오. 예 :

NSArray *newName=[NSArray arrayWithObject:@"Tom",@"Dick",@"Harry",nil]; 
NSPredicate *p=[NSPredicate predicateWithFormat:@"name NOT IN %@",newName]; 

... 그런 다음 해당 술어를 가져 오기에 사용하십시오. 반환 된 모든 개체는 이미 새 데이터에 특성 값을 가지고 있으므로 새 개체를 만드는 것을 건너 뛸 수 있습니다.

+0

나는 5000 개의 지구와 도시가있다. 5000 군데를 coredata에 넣으려고합니다. 각 지구에는 도시가 있으며 각 도시에는 많은 지구가있을 수 있습니다. 나는 2 개의 실체, 즉 지구와 도시 쌍을 가지고있다. 어떻게 그렇게 효율적으로 할 수 있습니까? –

+0

가장 효율적인 방법은 sqlite 저장소에 한 번 채우고 Xcode 프로젝트로 복사 한 다음 번들에 넣는 것입니다. 사용자 장치에서 처음 실행될 때 번들의 내용을 변경할 수 없으므로 문서 폴더로 복사합니다. – vikingosegundo

+0

저장소를 한 번만 개발 중이거나 사용자가 자주 수행해야하는 항목입니까? – TechZen

관련 문제