2011-12-12 45 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

相关问题