2011-12-12 3 views
1

저는 iOS 초보자입니다. 내가 얼마나이 아이폰 OS 기능을 사용하여,iOS - NSEntityDescription 및 NSManagedObjectContext를 사용하여 데이터베이스 항목 편집

-(void)insertMetricAction:(NSString *)action andValue:(NSString *)value andStatus:(NSString *)status 
{ 
MetricDb *aDbMessage = (MetricDb *)[NSEntityDescription 
             insertNewObjectForEntityForName:@"Metric" 
            inManagedObjectContext:localObjectContext]; 

aDbMessage.action=action; 
aDbMessage.value=value; 
aDbMessage.status = status; 
double timeInMilliSec=[[NSDate date] timeIntervalSince1970]*1000; 
NSString* timeStamp = [NSString stringWithFormat:@"%.0f" ,timeInMilliSec]; 
aDbMessage.timeStamp=timeStamp; 

NSError *error; 
if (![localObjectContext save:&error]) { 
    NSArray* detailedErrors = [[error userInfo] objectForKey:NSDetailedErrorsKey]; 
    if(detailedErrors != nil && [detailedErrors count] > 0) { 
     for(NSError* detailedError in detailedErrors) { 
      NSLog(@" DetailedError: %@", [detailedError userInfo]); 
     } 
    } 
    else { 
     NSLog(@"***Getting database error. Error: %@",[error userInfo]); 
    } 
} 

} 

대신, 나는 기존 행을 가져오고 단지 상태를 편집 할 - 내 데이터베이스에 새 행을 삽입하기 위해 다음 함수를 사용하고?

답변

2

당신은 당신이 관심있는 객체를 반환하는 NSFetchRequest을 만들어야 예는 아래에 주어진 action에 대한 실체 Metric의 인스턴스를 반환합니다.

- (MetricDb *) metricWithAction: (NSString *) action 
{ 
    NSFetchRequest * request = [[[NSFetchRequest alloc] init] autorelease]; 
    [request setEntity: [NSEntityDescription entityForName: @"Metric" inManagedObjectContext: localObjectContext]]; 
    [request setPredicate: [NSPredicate predicateWithFormat: @"(%K == %@)", 
          @"action", action]]; 
    [request setFetchLimit: 1]; 

    NSError * error = nil; 
    MetricDb * metric = [[localObjectContext executeFetchRequest: request error: &error] lastObject]; 
    if (error) { 
     NSLog(@"Error fetching metric - %@", [error localizedDescription]); 
    } 

    return metric; 
} 
+0

당신이 jQuery과를 사용하는 경우, 한 번에 많은 항목을 액세스하는 경우에는 NSFetchedResultsController를 고려해야합니다. 반복되는 많은 데이터베이스 페치를 단순화합니다. – gurooj