IOS数据持久化之Core Data(四) - 多表查询

在前面说了Core Data的单表操作,下面来说一下多表操作

首先来说一下表
新闻表(News)
新闻分类表(NewsSort)
新闻评论表(NewsComment)
新闻编辑表(NewsEditor)
职位表(Position)
薪水表(Salary)

表直接的关系描述:

新闻分类与新闻之间的关系是1 V N(一对多的关系)
新闻与新闻评论之间的关系是1 V N(一对多的关系)
新闻编辑与新闻之间的关系是1 V N(一对多的关系)
职位与新闻编辑之间的关系是1 V N(一对多的关系)

职位与薪水之间的关系是 1 V 1(一对一的关系)

下面来创建表,创建完成以后如下图:





下面创建表与表之间的关系

新闻分类与新闻直接的关系 1 V N

新闻编辑与新闻之间的关系 1 V N

新闻与新闻评论之间的关系 1 V N



介绍完了各个表直接的关系,它们之间的关系图如下 :

接下来,我们创建类,点击File->New->File,选择NSManagedObject subClass,点击Next,然后勾选所有的entities,如下图:

然后我们初始化数据,代码如下:

-(void)SaveData{
    NSManagedObjectContext *context = [self managedObjectContext];
    
    NewsSort *newssort =[NSEntityDescription insertNewObjectForEntityForName:NEWSSORT inManagedObjectContext:context];
    newssort.newssortid =[NSNumber numberWithInt:1];
    newssort.newssortname = @"国内新闻";
    
    
    NewsEditor *newseditor =[NSEntityDescription insertNewObjectForEntityForName:NEWSEDITOR inManagedObjectContext:context];
    newseditor.editorname = @"Jack";
    newseditor.editortel = @"62359633";
    newseditor.newseditorno = @"1";
    
    NewsEditor *newseditor1 =[NSEntityDescription insertNewObjectForEntityForName:NEWSEDITOR inManagedObjectContext:context];
    newseditor1.editorname = @"robbin";
    newseditor1.editortel = @"68432696";
    newseditor1.newseditorno = @"2";
    
    
    
    NewsComment *newscomment =[NSEntityDescription insertNewObjectForEntityForName:NEWSCOMMENT inManagedObjectContext:context];
    newscomment.commentid =[NSNumber numberWithInt:1];
    newscomment.commentcontent =@"看过了";
    newscomment.commentdate =[NSDate date];
    
    NewsComment *newscomment1 =[NSEntityDescription insertNewObjectForEntityForName:NEWSCOMMENT inManagedObjectContext:context];
    newscomment1.commentid =[NSNumber numberWithInt:2];
    newscomment1.commentcontent =@"写的不错";
    newscomment1.commentdate =[NSDate dateWithTimeIntervalSinceNow:-10];
    
    
    
    
    News *news = [NSEntityDescription insertNewObjectForEntityForName:NEWS inManagedObjectContext:context];
    
    news.newsid =[NSNumber numberWithInt:1];
    news.newstitle =@"财经新闻";
    news.newscontent = @"央行降息";
    news.newsviewcount =[NSNumber numberWithInt:1];
    news.news_newseditor =newseditor;
    news.newsdate =[NSDate date];
    news.news_newssort = newssort;
    news.news_newscomment =[NSSet setWithObjects:newscomment,newscomment1, nil];
    
    
    Position *position =[NSEntityDescription insertNewObjectForEntityForName:POSITION inManagedObjectContext:context];
    position.positionno = @"11";
    position.positionname = @"Level 1";
    
    Position *position1 =[NSEntityDescription insertNewObjectForEntityForName:POSITION inManagedObjectContext:context];
    position1.positionno = @"22";
    position1.positionname = @"Level 2";
    
    newseditor.newseditor_position = position;
    newseditor1.newseditor_position = position1;
    
   
    Salary *salary =[NSEntityDescription insertNewObjectForEntityForName:SALARY inManagedObjectContext:context];
    salary.sy_no = @"1";
    salary.sy_level =[NSNumber numberWithInt:1];
    salary.sy_scale =[NSNumber numberWithDouble:2.0];
    salary.salary_position = position;
    
    Salary *salary1 =[NSEntityDescription insertNewObjectForEntityForName:SALARY inManagedObjectContext:context];
    salary1.sy_no = @"2";
    salary1.sy_level =[NSNumber numberWithInt:2];
    salary1.sy_scale =[NSNumber numberWithDouble:4.0];
    salary1.salary_position = position1;
    
    
    NSError *error = nil;
    if([context save:&error]){
        NSLog(@"保存数据成功");
    }else{
        NSLog(@"保存数据成功");
    }
    
}


查询新闻,代码如下:

-(void)ViewNews{
    NSManagedObjectContext *context =[self managedObjectContext];
    
    NSEntityDescription *entity =[NSEntityDescription entityForName:NEWS inManagedObjectContext:context];
    
    //NSPredicate *predicate =[NSPredicate predicateWithFormat:@""];
    
    NSFetchRequest *fetchRequest =[[NSFetchRequest alloc] init];
    [fetchRequest setEntity:entity];
    
    NSArray *array =[context executeFetchRequest:fetchRequest error:nil];
    
    for(News *news  in array){
        news.newsviewcount =[NSNumber numberWithInt:[news.newsviewcount intValue]+1];
        if([context save:nil]){
            NSLog(@"查询新闻");
        }else{
            NSLog(@"查询新闻失败");
        }
    } 
}


添加新闻,代码如下:

-(void)AddNews{
    NSManagedObjectContext *context =[self managedObjectContext];
    News *news =[NSEntityDescription insertNewObjectForEntityForName:NEWS inManagedObjectContext:context];
    news.newsid =[NSNumber numberWithInt:2];
    news.newstitle =@"对话创业者";
    news.newsdate =[NSDate date];
    news.newsviewcount =[NSNumber numberWithInt:0];
    news.newscontent = @"什么时候融资以及占多少股份";
    
    NSEntityDescription *newssortentity =[NSEntityDescription entityForName:NEWSSORT inManagedObjectContext:context];
    
    NSFetchRequest *fecthRequest =[[NSFetchRequest alloc] init];
    
    [fecthRequest setEntity:newssortentity];
    
    NSArray *arr = [context executeFetchRequest:fecthRequest error:nil];
    if([arr count]>0){
        news.news_newssort = [arr objectAtIndex:0];
    }
    
    NSEntityDescription *newseditorentity =[NSEntityDescription entityForName:NEWSEDITOR inManagedObjectContext:context];
    NSFetchRequest *editorFetchRequest =[[NSFetchRequest alloc] init];
    [editorFetchRequest setEntity:newseditorentity];
    
    NSArray *editorArr =[context executeFetchRequest:editorFetchRequest error:nil];
    if([editorArr count]>0){
        news.news_newseditor = [editorArr objectAtIndex:0];
    }
    
    if([context save:nil]){
        NSLog(@"添加新闻成功");
    }else{
        NSLog(@"添加新闻失败");
    }
}



添加评论,代码如下:

-(void)AddComment{
    
    NSManagedObjectContext *context =[self managedObjectContext];
    
    NSEntityDescription *entity =[NSEntityDescription entityForName:NEWS inManagedObjectContext:context];
    
    //NSPredicate *predicate =[NSPredicate predicateWithFormat:@""];
    
    NSFetchRequest *fetchRequest =[[NSFetchRequest alloc] init];
    [fetchRequest setEntity:entity];
    
    NSArray *array =[context executeFetchRequest:fetchRequest error:nil];
    
    for(News *news  in array){
       
        NewsComment *newscomment = [NSEntityDescription insertNewObjectForEntityForName:NEWSCOMMENT inManagedObjectContext:context];
        newscomment.commentid =[NSNumber numberWithInt:3];
        newscomment.newscomment_news = news;
        newscomment.commentcontent = @"添加了新的新闻评论";
        newscomment.commentdate =[NSDate date];
        
        if([context save:nil]){
            NSLog(@"添加新闻评论");
        }else{
            NSLog(@"添加新闻评论失败");
        }
        
    }
}

示例代码下载

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值