iOS猿媛圈iOS 基础与扩展iOS开发

CoreData简单入门

2016-04-05  本文已影响123人  FlyElephant

CoreData是iOS5之后出的数据化存储框架,缓存本地化内容,提高应用程序响应速度,实际使用过程中也非常简单,提供了数据建模工具,可视化对象图表的方式提供一对一,一对多,多对多的数据关系,通过Model和Context实现数据增删改查.CoreData经过苹果的优化,无论在是单元测试还是运行速度上都是非常优秀的,有必要进行一下简单的入门了解.

新增

Snip20160405_1.png
Book *insertBook=[NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([Book class]) inManagedObjectContext:self.context];
if (self.textField.text.length) {
    insertBook.author=self.textField.text;
    [self.dataManger saveContext];
    NSLog(@"FlyElephant add data--%@",self.textField.text);
}

查询

if (self.textField.text.length) {
    NSFetchRequest *request =[[NSFetchRequest alloc] init];
    request.entity = [NSEntityDescription entityForName:NSStringFromClass([Book class]) inManagedObjectContext:self.context];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"author contains %@", self.textField.text];
    request.predicate = predicate;
    NSError *error = nil;
    NSArray *objs = [self.context executeFetchRequest:request error:&error];
    if (error) {
        [NSException raise:@"查询错误" format:@"%@", [error localizedDescription]];
    }
    for (NSManagedObject *obj in objs) {
        NSLog(@"作者=%@", [obj valueForKey:@"author"]);
    }
    NSLog(@"search success-FlyElephant");
}

更新

if (self.textField.text.length) {
    NSFetchRequest *request =[[NSFetchRequest alloc] init];
    request.entity = [NSEntityDescription entityForName:NSStringFromClass([Book class]) inManagedObjectContext:self.context];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"author like %@", self.textField.text];
    request.predicate = predicate;
    NSError *error = nil;
    NSArray *objs = [self.context executeFetchRequest:request error:&error];
    if (error) {
        [NSException raise:@"查询错误" format:@"%@", [error localizedDescription]];
    }
    for (NSManagedObject *obj in objs) {
        NSLog(@"FlyElephant author=%@", [obj valueForKey:@"author"]);
        NSString *updateValue=[NSString stringWithFormat:@"%@修改",[obj valueForKey:@"author"]];
        [obj  setValue:updateValue forKey:@"author"];
    }
    [self.dataManger saveContext];
}

删除

if (self.textField.text.length) {
    NSFetchRequest *request =[[NSFetchRequest alloc] init];
    request.entity = [NSEntityDescription entityForName:NSStringFromClass([Book class]) inManagedObjectContext:self.context];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"author contains %@", self.textField.text];
    request.predicate = predicate;
    NSError *error = nil;
    NSArray *objs = [self.context executeFetchRequest:request error:&error];
    if (error) {
        [NSException raise:@"查询错误" format:@"%@", [error localizedDescription]];
    }
    for (NSManagedObject *obj in objs) {
        NSLog(@"作者=%@", [obj valueForKey:@"author"]);
        [self.context deleteObject:obj];
    }
    [self.dataManger saveContext];
}else{
    NSFetchRequest *request =[[NSFetchRequest alloc] init];
    request.entity = [NSEntityDescription entityForName:NSStringFromClass([Book class]) inManagedObjectContext:self.context];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"author != ''"];
    request.predicate = predicate;
    NSError *error = nil;
    NSArray *objs = [self.context executeFetchRequest:request error:&error];
    if (error) {
        [NSException raise:@"查询错误" format:@"%@", [error localizedDescription]];
    }
    for (NSManagedObject *obj in objs) {
        NSLog(@"作者=%@", [obj valueForKey:@"author"]);
        [self.context deleteObject:obj];
    }
    [self.dataManger saveContext];
}
NSLog(@"delete success-FlyELephant");

以上的增删改查是根据FEDataManger进行操作的,FEDataManger的代码:
<pre>
`-(NSManagedObjectContext *)managedObjectContext{
if (!_managedObjectContext) {
NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];

    //初始化NSPersistentStoreCoordinator
    NSPersistentStoreCoordinator *persistCoordinator=[[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:model];
    NSURL *applicationURL=[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
    NSURL *storeURL = [applicationURL URLByAppendingPathComponent:@"FECoreData.sqlite"];
    
    NSError *error = nil;
    NSPersistentStore *store = [persistCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error];
    if (store == nil) {
        [NSException raise:@"添加数据库错误" format:@"%@", [error localizedDescription]];
    }
    _managedObjectContext=[[NSManagedObjectContext alloc]initWithConcurrencyType:NSMainQueueConcurrencyType];
    _managedObjectContext.persistentStoreCoordinator = persistCoordinator;
}
return _managedObjectContext;

}

项目地址

FECoreData传送门-FlyElephant

上一篇下一篇

猜你喜欢

热点阅读