2011-04-29 3 views
1

코어 데이터의 일부 레코드를 업데이트해야합니다. 이것이 올바른 방법일까요?목표 C - 코어 데이터 레코드 업데이트

NSManagedObjectContext *context = [self managedObjectContext]; 
NSMutableArray *poiFromCD=(NSMutableArray *)[self takePoiFromCoreData]; 

for (int i=0; i<[array count]; i++) { 
    for (int j=0; j<[poiFromCD count]; j++) { 
    Poi *poi=(Poi *)[poiFromCD objectAtIndex:j]; 
    if ([[[array objectAtIndex:j]objectForKey:@"poiID"]isEqualToString:poi.poiID]) { 
     Poi *p=[poiFromCD objectAtIndex:j]; 
     p.poiID=[[array objectAtIndex:i]objectForKey:@"poiID"]; 
     p.lastmod=[[array objectAtIndex:i]objectForKey:@"lastmod"]; 
    } else { 
     Poi *p; 
     p=[NSEntityDescription insertNewObjectForEntityForName:@"Poi" inManagedObjectContext:context]; 
     p.poiID=[[array objectAtIndex:i]objectForKey:@"poiID"]; 
     p.lastmod=[[array objectAtIndex:i]objectForKey:@"lastmod"]; 
    } 
} 
} 

NSError *error; 
if (![context save:&error]) { 
NSLog(@"Errore durante il salvataggio: %@", [error localizedDescription]); 
} 

나는 나의 방법에 배열을 전달, 그리고 난 이미 CoreData에 있고 poiFromCD에 넣어 데이터를 가지고.

내가 잘못했다면 올바른 길을 가르쳐주십시오. :)

답변

0

아니요, 코어 데이터 개체를 업데이트하는 표준 방법은 아닙니다. 분명히 핵심 데이터를 SQL로 처리하려고 시도하고 있으며 작동하지 않습니다.

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

데이터 모델의 모양을 알지 못하면 무엇을 하려는지 알 수는 없지만 이와 같은 개체 배열을 단계별로 실행해야하는 경우는 거의 없습니다.

관련 문제