yymodel 解析 fmdb

导入第三方 AFN yymodel FMDB

屏幕快照 2019-01-16 上午9.30.53.png
#import <YYModel.h>
NS_ASSUME_NONNULL_BEGIN
//@class ResultModel;
//@class SmallModel;


@interface SmallModel : NSObject
//第一层
//主见id
@property(nonatomic , assign)int ID;
@property(nonatomic , strong)NSString *title;
//@property(nonatomic , strong)NSString *date;
@property(nonatomic , strong)NSString *url;
@end

@interface ResultModel : NSObject
//第二层
@property(nonatomic , strong)NSString *stat;
@property(nonatomic , strong)NSArray *data;
@end

@interface Model : NSObject
//第一层
@property(nonatomic , strong)NSString *reason;
@property(nonatomic , strong)ResultModel *result;
@end
model.m
@implementation SmallModel

//+ (NSDictionary *)modelCustomPropertyMapper {
//
//    return@{@"cataID" :@"id"};
//
//}

@end

@implementation ResultModel
+ (NSDictionary *)modelContainerPropertyGenericClass {
    return @{@"data":[SmallModel class]};
}

@end
@implementation ZhouKaoModel
+ (NSDictionary *)modelContainerPropertyGenericClass {
    return @{@"result":[ResultModel class]};
}

DataManager.h
+(DataManager*)sharedDataHandle;

//增

-(void)addOneMovie:(id)movie;

//删
-(void)deleteMovieByID:(int)title;

//查

-(id)getAllMovies;
DataManager.m
#import "FMDB.h"
#import "Model.h"

static DataManager*_defaulthandle =nil;

@interface DataManager ()

@property(nonatomic,strong)FMDatabase*fMDB;  //

@end

@implementation DataManager
+(DataManager*)sharedDataHandle

{
    
    if (_defaulthandle == nil) {
        
        _defaulthandle = [[DataManager alloc] init];
        
        
    }
    
    return _defaulthandle;
    
}

+(instancetype)allocWithZone:(struct _NSZone*)zone

{
    
    if (_defaulthandle == nil) {
        
        _defaulthandle= [super allocWithZone:zone];
        
    }
    
    return _defaulthandle;
    
}

-(FMDatabase *)fMDB

{
    
    if(!_fMDB) {
        
        NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"movies.sqlite"];
        
        NSLog(@"path=====%@",path);
        
        _fMDB= [FMDatabase databaseWithPath:path];
        
        [self initTable];
        
    }
    
    return _fMDB;
    
}

// 初始化数据表

-(void)initTable

{
    
    [_fMDB open];
    
    [_fMDB executeUpdate:@"CREATE TABLE movie (id INTEGER PRIMARY KEY AUTOINCREMENT,title TEXT,author_name TEXT, url,TEXT)"];
    
    [_fMDB close];
    
}

-(void)addOneMovie:(SmallModel*)movie

{
    [self.fMDB open];
    
    [self.fMDB executeUpdateWithFormat:@"insert into movie (title,author_name,url) values (%@,%@,%@)",movie.title,movie.author_name,movie.url];
    NSLog(@"插入成功");
    
    [self.fMDB close];
    
}

-(void)deleteMovieByID:(int)title

{
    
    [self.fMDB open];
    
    [self.fMDB executeUpdateWithFormat:@"DELETE FROM movie WHERE id = %d",title];
    
    [self.fMDB close];
    
}

-(NSArray*)getAllMovies

{
    
    [self.fMDB open];
    
    
    
    NSMutableArray *arr = [[NSMutableArray alloc] init];
    
    FMResultSet *result = [self.fMDB executeQuery:@"SELECT * FROM movie"];
    
    while([result next])
    {
        SmallModel *movie = [[SmallModel alloc]init];
        
        [arr addObject:movie];
        
        movie.ID= [result intForColumnIndex:0];
        
        movie.title= [result stringForColumnIndex:1];
        
        movie.author_name = [result stringForColumnIndex:2];
        
        movie.url = [result stringForColumnIndex:3];
    }
    
    [self.fMDB close];
    
    return[arr copy];
    
}

viewController.m
#import "AFNetworking.h"
#import "Model.h"
#import "VcTableViewCell.h"
#import "TwoViewController.h"
#import "RightViewController.h"
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>{
    Model *mod;
}
@property(nonatomic , strong)UITableView *ojtable;
@property(nonatomic , strong)NSMutableArray *array;

@end

@implementation ViewController
-(UITableView *)ojtable{
    if (!_ojtable) {
        _ojtable = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];
        _ojtable.delegate = self;
        _ojtable.dataSource = self;
    }
    return _ojtable;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"收cang" style:UIBarButtonItemStyleDone target:self action:@selector(right)];
    self.array = [NSMutableArray array];
    [self.view addSubview:self.ojtable];
    [self loadData];
    
}
- (void)loadData{
    
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    NSDictionary *dict = @{@"key":@"67968aeebf1f4e3b6170f7217b6f3cdb"};
    // POST请求 http://v.juhe .cn/toutiao/index?key=67968aeebf1f4e3b6170f7217b6f3cdb
    [manager POST:@"http://v.juhe.cn/toutiao/index?key=67968aeebf1f4e3b6170f7217b6f3cdb&type=top" parameters:dict progress:^(NSProgress * _Nonnull uploadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
                NSLog(@"%@",responseObject);

        self->mod = [Model yy_modelWithJSON:responseObject];
        [self.array addObject:self->mod.result.data];
        self.array = self->mod.result.data;
        //刷新表格
        [self.ojtable reloadData];
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@",error);
    }];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return self.array.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    if (!cell) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];
    }
    SmallModel *mod = self.array[indexPath.row];
    
    cell.textLabel.text = mod.title;
    cell.detailTextLabel.text = mod.author_name;
    
    
    return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    TwoViewController *two = [TwoViewController new];
    SmallModel *model = self.array[indexPath.row];
    two.StrUrl = model;
    [self.navigationController pushViewController:two animated:YES];
}
- (void)right{
    RightViewController *right = [RightViewController new];
    [self.navigationController pushViewController:right animated:YES];
}
@end

twoviewcontroller.h
#import "Model.h"
NS_ASSUME_NONNULL_BEGIN

@interface TwoViewController : UIViewController
@property(nonatomic , strong)SmallModel *StrUrl;

twocontroller.m

#import "DataManager.h"
@interface TwoViewController ()

@end

@implementation TwoViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"收藏" style:UIBarButtonItemStyleDone target:self action:@selector(right)];
    
    // web 详情y界面
    UIWebView *web = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    //转换url
    NSURL *url = [NSURL URLWithString:self.StrUrl.url];
    
    NSURLRequest *requst = [NSURLRequest requestWithURL:url];
    
    // 添加
    [web loadRequest:requst];
    [self.view addSubview:web];

}
// 点击单行右侧按钮收藏
- (void)right{
  [[DataManager sharedDataHandle] addOneMovie:self.StrUrl];
    
}

@end

rightviewcontroller.m
#import "RXqViewController.h"
#import "DataManager.h"
#import "Model.h"
#import "TwoViewController.h"
@interface RightViewController ()<UITableViewDelegate,UITableViewDataSource>
@property(nonatomic , strong)UITableView *ojtable;
@property(nonatomic , strong)NSMutableArray *array;

@end

@implementation RightViewController
- (void)viewDidAppear:(BOOL)animated{
    self.array = [[DataManager sharedDataHandle]getAllMovies];
   
    [self.ojtable reloadData];
}
- (UITableView *)ojtable{
    if (!_ojtable) {
        _ojtable = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStylePlain];
        _ojtable.delegate = self;
        _ojtable.dataSource = self;
    }
    return _ojtable;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view addSubview:self.ojtable];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return self.array.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    if (!cell) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];
    }
    SmallModel *mod = self.array[indexPath.row];
    cell.textLabel.text = mod.title;
    cell.detailTextLabel.text = mod.author_name;
    return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    RXqViewController *rxq = [RXqViewController new];
    SmallModel *model =self.array[indexPath.row];
    rxq.StrUrl = model;
    [self.navigationController pushViewController:rxq animated:YES];
}

// 左滑删除
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
    SmallModel *model = self.array[indexPath.row];
    [[DataManager sharedDataHandle]deleteMovieByID:model.ID];
    self.array = [[DataManager sharedDataHandle] getAllMovies];
    [self.ojtable reloadData];
}
@end


rxqviewcontroller.h
#import "Model.h"
NS_ASSUME_NONNULL_BEGIN

@interface RXqViewController : UIViewController
@property(nonatomic , strong)SmallModel *StrUrl;
@end

rxqviewcontroller.m

// web 详情y界面
    UIWebView *web = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    
    //转换url
    NSURL *url = [NSURL URLWithString:self.StrUrl.url];
    
    NSURLRequest *requst = [NSURLRequest requestWithURL:url];
    
    // 添加
    [web loadRequest:requst];
    [self.view addSubview:web];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容