【问题标题】:iOS - edit database entry using NSEntityDescription and NSManagedObjectContextiOS - 使用 NSEntityDescription 和 NSManagedObjectContext 编辑数据库条目
【发布时间】:2011-12-12 15:40:32
【问题描述】:

我是 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 函数来做到这一点?

【问题讨论】:

    标签: iphone ios nsmanagedobjectcontext nsentitydescription


    【解决方案1】:

    您需要创建一个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;
    }
    

    【讨论】:

    • 如果您正在使用 UITableView,或者只是一次访问大量条目,您应该考虑使用NSFetchedResultsController。它简化了许多重复的数据库获取。
    猜你喜欢
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 2013-05-29
    • 2021-04-04
    • 2013-07-03
    • 1970-01-01
    相关资源
    最近更新 更多