2011-12-12 35 views
1

編輯數據庫條目我是一個新手的iOS。我使用下面的函數來插入新行到我的數據庫 -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]); 
    } 
} 

} 

如果相反,我希望獲取現有行,只是編輯的狀態,我會怎麼做它使用的是iOS的功能呢?

回答

2

你需要創建一個NSFetchRequest回你感興趣的對象下面的例子將返回實體Metric的實例對於給定action

- (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

如果您正在使用一個UITableView,或者只是訪問許多條目一次,你應該考慮的'NSFetchedResultsController'。它簡化了大量重複的數據庫提取。 – gurooj

相關問題