iOS - редактируйте запись базы данных, используя NSEntityDescription и NSManagedObjectContext - PullRequest
1 голос
/ 12 декабря 2011

Я новичок в iOS.Я использую следующую функцию для вставки новых строк в свою базу данных -

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

1 Ответ

2 голосов
/ 12 декабря 2011

Вам нужно будет создать 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;
}
...