UI19_豆瓣收藏

引用AFNetWorking三方
引用AFNetWorking三方要在倒数第三个文件, 第222行加上@”text/html”
AppDelegate.h

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;


@end

AppDelegate.m

#import "AppDelegate.h"
#import "RootViewController.h"
#import "SaveTool.h"

@interface AppDelegate ()

@end

@implementation AppDelegate
- (void)dealloc {
    [_window release];
    [super dealloc];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];

    RootViewController *rootVC = [[RootViewController alloc] init];
    UINavigationController *NAVC = [[UINavigationController alloc] initWithRootViewController:rootVC];
    self.window.rootViewController = NAVC;
    [rootVC release];
    [NAVC release];

    [SaveTool isHaveFolder];


    return YES;
}

SaveTool.h

#import <Foundation/Foundation.h>
#import "Movie.h"

typedef NS_ENUM(NSUInteger, SaveToolType) {
    SaveToolMovie,
    SaveToolActivity,
    SaveToolCinema,
};

@interface SaveTool : NSObject

//  用来判断文件夹是否存在, 如果没有文件夹, 就创建一个, 如果有不做任何操作
+ (void)isHaveFolder;

+ (BOOL)isHaveMovieInPlist:(Movie *)movie;

+ (void)saveMovieToPlist:(Movie *)movie;

+ (void)cancleMovieInPlist:(Movie *)movie;

+ (BOOL)isHaveInFile:(id)object type:(SaveToolType)type;


@end

SaveTool.m

#import "SaveTool.h"

@implementation SaveTool
+ (void)isHaveFolder {
    //  1. 找沙盒路径
    NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    //  2. 拼接电影的文件夹名
    NSString *movieFile = [sandBoxPath stringByAppendingPathComponent:@"Movie"];
    //  创建一个文件管理者
    NSFileManager *manager = [NSFileManager defaultManager];
    //  通过管理者调用方法, 根据路径判断文件夹是否存在
    if (![manager fileExistsAtPath:movieFile]) {
        //  创建文件夹
        [manager createDirectoryAtPath:movieFile withIntermediateDirectories:YES attributes:nil error:nil];
    }
//    NSLog(@"%@", movieFile);
}

+ (BOOL)isHaveMovieInPlist:(Movie *)movie {
    NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *docPath = [sandBoxPath stringByAppendingPathComponent:@"Movie/movie.plist"];

    //  反归档
    NSArray *movieArr = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath];
    //  遍历
    for (Movie *temp in movieArr) {
        if ([temp.movieId isEqualToString:movie.movieId]) {
            return NO;
        }
    }
    return YES;
}

+ (void)saveMovieToPlist:(Movie *)movie {
    NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *docPath = [sandBoxPath stringByAppendingPathComponent:@"Movie/movie.plist"];
    //  直接归档会覆盖掉之前的数据, 所以先进行反归档, 然后添加进去之后再进行归档操作
    NSMutableArray *movieArr = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath];
    if (movieArr == nil) {
        //  如果为空, 先进行初始化
        movieArr = [NSMutableArray array];
    }
    [movieArr addObject:movie];
    //  归档
    [NSKeyedArchiver archiveRootObject:movieArr toFile:docPath];
    NSLog(@"%@", docPath);
}

+ (void)cancleMovieInPlist:(Movie *)movie {
    NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *docPath = [sandBoxPath stringByAppendingPathComponent:@"Movie/movie.plist"];
    NSMutableArray *movieArr = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath];
    //  遍历之后移除相应的对象
    for (Movie *temp in movieArr) {
        if ([temp.movieId isEqualToString:movie.movieId]) {
            //  移除
            [movieArr removeObject:temp];
            break;
        }
    }

    //  归档
    [NSKeyedArchiver archiveRootObject:movieArr toFile:docPath];
}

+ (BOOL)isHaveInFile:(id)object type:(SaveToolType)type {
    NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    switch (type) {
        case SaveToolMovie: {
            //  拼接电影的文件夹路径
            NSString *docPath = [sandBoxPath stringByAppendingPathComponent:@"Movie/movie.plist"];
            NSArray *movieArr = [NSKeyedUnarchiver unarchiveObjectWithFile:docPath];
            Movie *movie = object;
            for (Movie *temp in movieArr) {
                if ([temp.movieId isEqualToString:movie.movieId]) {
                    return NO;
                }
            }
        } break;

        default:
            break;
    }
    return YES;
}

@end

RootViewController.h

#import <UIKit/UIKit.h>

@interface RootViewController : UIViewController

@end

RootViewController.m

#import "RootViewController.h"
#import "AFNetworking.h"
#import "Movie.h"
#import "MovieDetailViewController.h"

@interface RootViewController ()<UITableViewDataSource, UITableViewDelegate>
@property(nonatomic, retain)NSMutableArray *movieArr;
@property(nonatomic, retain)UITableView *tableView;

@end

@implementation RootViewController
- (void)dealloc
{
    [_movieArr release];
    [_tableView release];
    [super dealloc];
}
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.


    [self createData];
//    [self network];
    self.tableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];self.tableView.dataSource = self;
    self.tableView.delegate = self;
    [self.view addSubview:self.tableView];
    [_tableView release];

    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"reuse"];


}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    MovieDetailViewController *MDVC = [[MovieDetailViewController alloc] init];
    [self.navigationController pushViewController:MDVC animated:YES];
    [MDVC release];
    MDVC.movie = self.movieArr[indexPath.row];

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuse" forIndexPath:indexPath];
    Movie *movie = self.movieArr[indexPath.row];
    cell.textLabel.text = movie.movieName;
    return cell;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.movieArr.count;
}

- (void)network {
    //  检测网络情况
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    //  开始检测
    [manager startMonitoring];
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

    }];
    [manager stopMonitoring];
}

- (void)createData {
    AFHTTPRequestOperationManager *manager  = [AFHTTPRequestOperationManager manager];
    [manager GET:@"http://project.lanou3g.com/teacher/yihuiyun/lanouproject/movielist.php" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"%@", responseObject);
        NSDictionary *dic = responseObject;
        self.movieArr = [NSMutableArray array];
        for (NSDictionary *tempDic in dic[@"result"]) {
            Movie *movie = [[Movie alloc] init];
            [movie setValuesForKeysWithDictionary:tempDic];
            [self.movieArr addObject:movie];
            [movie release];
        }
        [self.tableView reloadData];
//        NSLog(@"%ld", self.movieArr.count);

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"%@", error);
    }];

}

MovieDetailViewController.h

#import <UIKit/UIKit.h>
@class Movie;
@interface MovieDetailViewController : UIViewController
@property(nonatomic, retain)Movie *movie;

@end

MovieDetailViewController.m

#import "MovieDetailViewController.h"
#import "Movie.h"
#import "SaveTool.h"

@interface MovieDetailViewController ()
@property(nonatomic, retain)UILabel *label;
@property(nonatomic, retain)UIScrollView *scrollView;

@end

@implementation MovieDetailViewController
- (void)dealloc
{
    [_label release];
    [_scrollView release];
    [super dealloc];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor = [UIColor whiteColor];
    self.title = self.movie.movieName;

    //  因为按钮上的子显示的是当前model的收藏情况, 所以需要先进行反归档, 如果存在就显示已收藏, 不存在显示收藏
    if ([SaveTool isHaveInFile:self.movie type:SaveToolMovie]) {
        self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"收藏" style:UIBarButtonItemStylePlain target:self action:@selector(click:)];
    } else {
        self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"已收藏" style:UIBarButtonItemStylePlain target:self action:@selector(click:)];
    }
    self.label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 20)];
    [self.view addSubview:self.label];
    [_label release];
    self.label.text = @"专车新政的影响或许才刚刚开始。上周五,交通部公布了“专车新政”,神州专车在几大品牌中或成最大受益者,立即在市场上公布了几项重大决定。先是宣布手握10亿美元,计划在营销、服务上继续发力,欲做专车中的苹果;紧接着面向全国招聘万名退伍军人担任专车司机;更引人注意的是,神州专车还斥资2.1亿美元收购神州租车逾5%股份。";
    self.label.numberOfLines = 0;
    [self.label sizeToFit];
    NSLog(@"%g", self.label.frame.size.height);
#pragma mark    - 在label之后就可以写自适应高度scrollView了
//    NSLog(@"%@", self.movie.movieName);
}
- (void)click:(UIBarButtonItem *)button {
    if ([button.title isEqualToString:@"已收藏"]) {
        //  有一个提示窗口, 显示已收藏, 不需要重复收藏, 再点击就是移出收藏
        [SaveTool cancleMovieInPlist:self.movie];
        button.title = @"收藏";

    } else {
        //  收藏进行归档
        [SaveTool saveMovieToPlist:self.movie];
        button.title = @"已收藏";
    }
    NSLog(@"%@", button.title);
}

Movie.h

#import <Foundation/Foundation.h>

@interface Movie : NSObject<NSCoding>
@property(nonatomic, copy)NSString *movieId;
@property(nonatomic, copy)NSString *movieName;
@property(nonatomic, copy)NSString *pic_url;

@end

Movie.m

#import "Movie.h"

@implementation Movie
- (void)dealloc
{
    [_movieId release];
    [_movieName release];
    [_pic_url release];
    [super dealloc];
}
- (void)setValue:(id)value forUndefinedKey:(NSString *)key {

}

- (void)encodeWithCoder:(NSCoder *)aCoder {
    [aCoder encodeObject:self.movieId forKey:@"movieId"];
    [aCoder encodeObject:self.movieName forKey:@"movieName"];
    [aCoder encodeObject:self.pic_url forKey:@"pic_url"];
}
- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super init];
    if (self) {
        self.movieId = [aDecoder decodeObjectForKey:@"movieId"];
        self.movieName = [aDecoder decodeObjectForKey:@"movieName"];
        self.pic_url = [aDecoder decodeObjectForKey:@"pic_url"];
    }
    return self;
}

@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值