diff --git a/README.md b/README.md
index 5e7dc73..765bbe0 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,28 @@
-# iOSStudy
-iOSStudy是一个开源的iOS应用内容是致力于帮助iOS开发者找到适合自己的学习资源
+
+![Alt text] (https://raw.githubusercontent.com/chenguandong/iOSStudy/CoreDataJoin/iOSStudy/iOSStudy/%20Resource/images/appicon/icon_120.png)
+_____________________________________________
+# 关于iOSStudy
+
+iOSStudy 灵感来源于作者自学iOS开发的经验,收藏了一些博客视频网站等内容,希望可以帮助初学者找到更好的学习资源,作者也会不断的更新完善软件和内容,如果本软件对您的学习有所帮助欢迎到评分界面深深地点个赞,您的支持将是我前进的动力↖(^ω^)↗
+
+# 下一步计划
+
+1,加入开源软件推荐模块
+2,加入iCloud对收藏的支持
+
+
+# 官方博客
+http://iosstudy.lofter.com/
+
+# 特别感谢
+
+
+李辉 QQ:949843687 对该软件图标设计与制作
+龚凡凡 QQ:825244415 对该软件的技术支持
+
+
+# 联系我
+
+邮箱: chenguandong@163.com
+QQ: 787725000
+
diff --git a/iOSStudy/.gitignore b/iOSStudy/.gitignore
new file mode 100644
index 0000000..a3cd143
--- /dev/null
+++ b/iOSStudy/.gitignore
@@ -0,0 +1,26 @@
+# Xcode
+#
+build/
+*.pbxuser
+!default.pbxuser
+*.mode1v3
+!default.mode1v3
+*.mode2v3
+!default.mode2v3
+*.perspectivev3
+!default.perspectivev3
+xcuserdata
+*.xccheckout
+*.moved-aside
+DerivedData
+*.hmap
+*.ipa
+*.xcuserstate
+
+# CocoaPods
+#
+# We recommend against adding the Pods directory to your .gitignore. However
+# you should judge for yourself, the pros and cons are mentioned at:
+# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
+#
+# Pods/
diff --git a/iOSStudy/APService.h b/iOSStudy/APService.h
new file mode 100644
index 0000000..bd529c3
--- /dev/null
+++ b/iOSStudy/APService.h
@@ -0,0 +1,175 @@
+//
+// APService.h
+// APService
+//
+// Created by JPush on 12-8-15.
+// Copyright (c) 2012年 HXHG. All rights reserved.
+// Version: 1.8.3
+
+@class CLRegion;
+@class UILocalNotification;
+
+extern NSString *const kJPFNetworkDidSetupNotification; // 建立连接
+extern NSString *const kJPFNetworkDidCloseNotification; // 关闭连接
+extern NSString *const kJPFNetworkDidRegisterNotification; // 注册成功
+extern NSString *const kJPFNetworkDidLoginNotification; // 登录成功
+extern NSString *const
+ kJPFNetworkDidReceiveMessageNotification; // 收到消息(非APNS)
+extern NSString *const kJPFServiceErrorNotification; // 错误提示
+
+@class CLLocation;
+@interface APService : NSObject
+
+#pragma - mark 基本功能
+// 以下四个接口是必须调用的
++ (void)setupWithOption:(NSDictionary *)launchingOption; // 初始化
++ (void)registerForRemoteNotificationTypes:(NSUInteger)types
+ categories:(NSSet *)categories; // 注册APNS类型
++ (void)registerDeviceToken:(NSData *)deviceToken; // 向服务器上报Device Token
++ (void)handleRemoteNotification:(NSDictionary *)
+ remoteInfo; // 处理收到的APNS消息,向服务器上报收到APNS消息
+
+// 下面的接口是可选的
+// 设置标签和(或)别名(若参数为nil,则忽略;若是空对象,则清空;详情请参考文档:http://docs.jpush.cn/pages/viewpage.action?pageId=3309913)
++ (void)setTags:(NSSet *)tags
+ alias:(NSString *)alias
+ callbackSelector:(SEL)cbSelector
+ target:(id)theTarget;
++ (void)setTags:(NSSet *)tags
+ alias:(NSString *)alias
+ callbackSelector:(SEL)cbSelector
+ object:(id)theTarget;
++ (void)setTags:(NSSet *)tags
+ callbackSelector:(SEL)cbSelector
+ object:(id)theTarget;
++ (void)setAlias:(NSString *)alias
+ callbackSelector:(SEL)cbSelector
+ object:(id)theTarget;
+// 用于过滤出正确可用的tags,如果总数量超出最大限制则返回最大数量的靠前的可用tags
++ (NSSet *)filterValidTags:(NSSet *)tags;
+
+#pragma - mark 上报日志
+/**
+ * 记录页面停留时间功能。
+ * startLogPageView和stopLogPageView为自动计算停留时间
+ * beginLogPageView为手动自己输入停留时间
+ *
+ * @param pageName 页面名称
+ * @param seconds 页面停留时间
+ */
++ (void)startLogPageView:(NSString *)pageName;
++ (void)stopLogPageView:(NSString *)pageName;
++ (void)beginLogPageView:(NSString *)pageName duration:(int)seconds;
+
+/**
+ * 开启Crash日志收集, 默认是关闭状态.
+*/
++ (void)crashLogON;
+
+/**
+ * 地理位置设置
+ * 为了更精确的统计用户地理位置,可以调用此方法传入经纬度信息
+ * 需要链接 CoreLocation.framework 并且 #import
+ * @param latitude 纬度.
+ * @param longitude 经度.
+ * @param location 直接传递CLLocation *型的地理信息
+ */
++ (void)setLatitude:(double)latitude longitude:(double)longitude;
++ (void)setLocation:(CLLocation *)location;
+
+#pragma - mark 本地通知
+/**
+* 本地推送,最多支持64个
+* @param fireDate 本地推送触发的时间
+* @param alertBody 本地推送需要显示的内容
+* @param badge 角标的数字。如果不需要改变角标传-1
+* @param alertAction 弹框的按钮显示的内容(IOS 8默认为"打开",其他默认为"启动")
+* @param notificationKey 本地推送标示符
+* @param userInfo 自定义参数,可以用来标识推送和增加附加信息
+* @param soundName 自定义通知声音,设置为nil为默认声音
+
+* IOS8新参数
+* @param region 自定义参数
+* @param regionTriggersOnce 自定义参数
+* @param category 自定义参数
+*/
++ (UILocalNotification *)setLocalNotification:(NSDate *)fireDate
+ alertBody:(NSString *)alertBody
+ badge:(int)badge
+ alertAction:(NSString *)alertAction
+ identifierKey:(NSString *)notificationKey
+ userInfo:(NSDictionary *)userInfo
+ soundName:(NSString *)soundName;
+
++ (UILocalNotification *)setLocalNotification:(NSDate *)fireDate
+ alertBody:(NSString *)alertBody
+ badge:(int)badge
+ alertAction:(NSString *)alertAction
+ identifierKey:(NSString *)notificationKey
+ userInfo:(NSDictionary *)userInfo
+ soundName:(NSString *)soundName
+ region:(CLRegion *)region
+ regionTriggersOnce:(BOOL)regionTriggersOnce
+ category:(NSString *)category
+ NS_AVAILABLE_IOS(8_0);
+
+/**
+* 本地推送在前台推送。默认App在前台运行时不会进行弹窗,在程序接收通知调用此接口可实现指定的推送弹窗。
+* @param notification 本地推送对象
+* @param notificationKey 需要前台显示的本地推送通知的标示符
+*/
++ (void)showLocalNotificationAtFront:(UILocalNotification *)notification
+ identifierKey:(NSString *)notificationKey;
+/**
+* 删除本地推送
+* @param notificationKey 本地推送标示符
+* @param myUILocalNotification 本地推送对象
+*/
++ (void)deleteLocalNotificationWithIdentifierKey:(NSString *)notificationKey;
++ (void)deleteLocalNotification:(UILocalNotification *)localNotification;
+
+/**
+* 获取指定通知
+* @param notificationKey 本地推送标示符
+* @return 本地推送对象数组,[array count]为0时表示没找到
+*/
++ (NSArray *)findLocalNotificationWithIdentifier:(NSString *)notificationKey;
+
+/**
+* 清除所有本地推送对象
+*/
++ (void)clearAllLocalNotifications;
+
+#pragma - mark 设置Badge
+/**
+ * set setBadge
+ * @param value 设置JPush服务器的badge的值
+ * 本地仍须调用UIApplication:setApplicationIconBadgeNumber函数,来设置脚标
+ */
++ (BOOL)setBadge:(NSInteger)value;
+/**
+ * set setBadge
+ * @param value 清除JPush服务器对badge值的设定.
+ * 本地仍须调用UIApplication:setApplicationIconBadgeNumber函数,来设置脚标
+ */
+
++ (void)resetBadge;
+
+/**
+ * get RegistrationID
+ */
++ (NSString *)registrationID;
+
+#pragma - mark 打印日志信息配置
+/**
+ * setDebugMode获取更多的Log信息
+ * 开发过程中建议开启DebugMode
+ *
+ * setLogOFF关闭除了错误信息外的所有Log
+ * 发布时建议开启LogOFF用于节省性能开销
+ *
+ * 默认为不开启DebugLog,只显示基本的信息
+ */
++ (void)setDebugMode;
++ (void)setLogOFF;
+@end
diff --git a/iOSStudy/Base/BaseViewController.h b/iOSStudy/Base/BaseViewController.h
index 7b5c39a..48ee353 100644
--- a/iOSStudy/Base/BaseViewController.h
+++ b/iOSStudy/Base/BaseViewController.h
@@ -7,7 +7,7 @@
//
#import
-
+#import "NotificationCenterConstants.h"
@interface BaseViewController : UIViewController
@end
diff --git a/iOSStudy/Base/BaseViewController.m b/iOSStudy/Base/BaseViewController.m
index c6773d2..1ff56d8 100644
--- a/iOSStudy/Base/BaseViewController.m
+++ b/iOSStudy/Base/BaseViewController.m
@@ -7,6 +7,7 @@
//
#import "BaseViewController.h"
+#import "Constants .h"
@interface BaseViewController ()
@@ -14,11 +15,16 @@ @interface BaseViewController ()
@implementation BaseViewController
+
- (void)viewDidLoad {
[super viewDidLoad];
+
// Do any additional setup after loading the view.
+
}
+
+
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:YES];
diff --git a/iOSStudy/Bean/FavouriteBean.h b/iOSStudy/Bean/FavouriteBean.h
index 1bc484a..5ebd56e 100644
--- a/iOSStudy/Bean/FavouriteBean.h
+++ b/iOSStudy/Bean/FavouriteBean.h
@@ -32,7 +32,7 @@ typedef NS_ENUM(NSInteger, FAVOURITE_TYPE) {
*/
@property(nonatomic,copy)NSString *url;
/**
- * 类型 1 博客 2 网站 3 视频
+ * 类型 1 收藏博客 2 收藏网站 3 收藏视频 11,持久化博客 22,持久化网站 33,持久化视频
*/
@property(nonatomic,copy)NSString* type;
@end
diff --git a/iOSStudy/Bean/blogBean/BlogBean.h b/iOSStudy/Bean/blogBean/BlogBean.h
index a5d9180..5e4d6ae 100644
--- a/iOSStudy/Bean/blogBean/BlogBean.h
+++ b/iOSStudy/Bean/blogBean/BlogBean.h
@@ -38,4 +38,6 @@
* 博客地址
*/
@property(nonatomic,copy)NSString*date;
+
+@property(nonatomic,copy)NSString*version;
@end
diff --git a/iOSStudy/Bean/blogBean/BlogBean.m b/iOSStudy/Bean/blogBean/BlogBean.m
index 6e26d6f..c0152c9 100644
--- a/iOSStudy/Bean/blogBean/BlogBean.m
+++ b/iOSStudy/Bean/blogBean/BlogBean.m
@@ -13,6 +13,7 @@ + (NSDictionary *)JSONKeyPathsByPropertyKey{
return @{
+ @"version":@"version",
@"name": @"name",
@"title": @"title",
@"subTitle": @"subTitle",
diff --git a/iOSStudy/Bean/blogBean/BlogJsonBean.h b/iOSStudy/Bean/blogBean/BlogJsonBean.h
new file mode 100644
index 0000000..c8b122e
--- /dev/null
+++ b/iOSStudy/Bean/blogBean/BlogJsonBean.h
@@ -0,0 +1,15 @@
+//
+// BlogJsonBean.h
+// iOSStudy
+//
+// Created by chenguandong on 15/4/2.
+// Copyright (c) 2015年 chenguandong. All rights reserved.
+//
+
+#import
+#import
+#import
+@interface BlogJsonBean : MTLModel
+@property(nonatomic,copy)NSString *version;
+@property(nonatomic,strong)NSArray *bloglists;
+@end
diff --git a/iOSStudy/Bean/blogBean/BlogJsonBean.m b/iOSStudy/Bean/blogBean/BlogJsonBean.m
new file mode 100644
index 0000000..11ecbd3
--- /dev/null
+++ b/iOSStudy/Bean/blogBean/BlogJsonBean.m
@@ -0,0 +1,22 @@
+//
+// BlogJsonBean.m
+// iOSStudy
+//
+// Created by chenguandong on 15/4/2.
+// Copyright (c) 2015年 chenguandong. All rights reserved.
+//
+
+#import "BlogJsonBean.h"
+
+@implementation BlogJsonBean
+
++ (NSDictionary *)JSONKeyPathsByPropertyKey{
+
+
+ return @{
+ @"version": @"version",
+ @"bloglists": @"bloglists"
+ };
+}
+
+@end
diff --git a/iOSStudy/Bean/versionBean/VersionBean.h b/iOSStudy/Bean/versionBean/VersionBean.h
new file mode 100644
index 0000000..8866057
--- /dev/null
+++ b/iOSStudy/Bean/versionBean/VersionBean.h
@@ -0,0 +1,23 @@
+//
+// VersionBean.h
+// iOSStudy
+//
+// Created by chenguandong on 15/4/2.
+// Copyright (c) 2015年 chenguandong. All rights reserved.
+//
+
+#import
+#import
+#import
+@interface VersionBean : MTLModel
+/**
+ * 当前请求地址的URL
+ */
+@property(nonatomic,copy)NSString *url;
+
+/**
+ * 当前请求地址URL版本号
+ */
+@property(nonatomic,copy)NSString *urlVersion;
+
+@end
diff --git a/iOSStudy/Bean/versionBean/VersionBean.m b/iOSStudy/Bean/versionBean/VersionBean.m
new file mode 100644
index 0000000..7c7641c
--- /dev/null
+++ b/iOSStudy/Bean/versionBean/VersionBean.m
@@ -0,0 +1,24 @@
+//
+// VersionBean.m
+// iOSStudy
+//
+// Created by chenguandong on 15/4/2.
+// Copyright (c) 2015年 chenguandong. All rights reserved.
+//
+
+#import "VersionBean.h"
+
+@implementation VersionBean
+
+
++ (NSDictionary *)JSONKeyPathsByPropertyKey{
+
+
+ return @{
+ @"url": @"url",
+ @"urlVersion": @"urlVersion"
+ };
+}
+
+
+@end
diff --git a/iOSStudy/Bean/videoBean/VideoBean.h b/iOSStudy/Bean/videoBean/VideoBean.h
index c31da43..b85f495 100644
--- a/iOSStudy/Bean/videoBean/VideoBean.h
+++ b/iOSStudy/Bean/videoBean/VideoBean.h
@@ -8,9 +8,29 @@
#import "WebBean.h"
-@interface VideoBean : WebBean
+@interface VideoBean : MTLModel
/**
* zh 中文 us 英文
*/
@property(nonatomic,copy)NSString *videoLanguageType;
+
+
+
+/**
+ * 网站标题
+ */
+@property(nonatomic,copy)NSString*title;
+/**
+ * 网站描述
+ */
+@property(nonatomic,copy)NSString*subTitle;
+/**
+ * 网站图片
+ */
+@property(nonatomic,copy)NSString*webImage;
+/**
+ * 网站地址
+ */
+@property(nonatomic,copy)NSString*webUrl;
+
@end
diff --git a/iOSStudy/Bean/videoBean/VideoBean.m b/iOSStudy/Bean/videoBean/VideoBean.m
index 06d43ef..ab4a216 100644
--- a/iOSStudy/Bean/videoBean/VideoBean.m
+++ b/iOSStudy/Bean/videoBean/VideoBean.m
@@ -12,9 +12,13 @@ @implementation VideoBean
+ (NSDictionary *)JSONKeyPathsByPropertyKey{
- [super JSONKeyPathsByPropertyKey];
+
return @{
- @"videoLanguageType": @"videoLanguageType",
+ @"title":@"title",
+ @"subTitle": @"subTitle",
+ @"webImage": @"webImage",
+ @"webUrl": @"webUrl",
+ @"videoLanguageType": @"videoLanguageType"
};
}
@end
diff --git a/iOSStudy/Bean/webBean/WebBean.m b/iOSStudy/Bean/webBean/WebBean.m
index 2adc3ea..fcbaba3 100644
--- a/iOSStudy/Bean/webBean/WebBean.m
+++ b/iOSStudy/Bean/webBean/WebBean.m
@@ -16,7 +16,7 @@ + (NSDictionary *)JSONKeyPathsByPropertyKey{
return @{
@"name": @"name",
@"title": @"title",
- @"subTitle": @"subTitile",
+ @"subTitle": @"subTitle",
@"webImage": @"webImage",
@"webUrl": @"webUrl"
};
diff --git a/iOSStudy/Cell/STBaseTableViewCell.h b/iOSStudy/Cell/STBaseTableViewCell.h
new file mode 100644
index 0000000..cf4a350
--- /dev/null
+++ b/iOSStudy/Cell/STBaseTableViewCell.h
@@ -0,0 +1,18 @@
+//
+// BaseTableViewCell.h
+// iOSStudy
+//
+// Created by chenguandong on 15/4/9.
+// Copyright (c) 2015年 chenguandong. All rights reserved.
+//
+
+#import
+#import
+@interface STBaseTableViewCell :SWTableViewCell
+@property (weak, nonatomic) IBOutlet UIImageView *backgroundImageView;
+
+@property (weak, nonatomic) IBOutlet UIImageView *imageIcon;
+@property (weak, nonatomic) IBOutlet UILabel *title;
+@property (weak, nonatomic) IBOutlet UILabel *subtitle;
+
+@end
diff --git a/iOSStudy/Cell/STBaseTableViewCell.m b/iOSStudy/Cell/STBaseTableViewCell.m
new file mode 100644
index 0000000..68336c3
--- /dev/null
+++ b/iOSStudy/Cell/STBaseTableViewCell.m
@@ -0,0 +1,26 @@
+//
+// BaseTableViewCell.m
+// iOSStudy
+//
+// Created by chenguandong on 15/4/9.
+// Copyright (c) 2015年 chenguandong. All rights reserved.
+//
+
+#import "STBaseTableViewCell.h"
+
+@implementation STBaseTableViewCell
+
+- (void)awakeFromNib {
+ // Initialization code
+ self.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
+ _imageIcon.layer.cornerRadius = 5;
+ _imageIcon.layer.masksToBounds = YES;
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+ [super setSelected:selected animated:animated];
+ // Configure the view for the selected state
+}
+
+
+@end
diff --git a/iOSStudy/Cell/STBaseTableViewCell.xib b/iOSStudy/Cell/STBaseTableViewCell.xib
new file mode 100644
index 0000000..dbcc030
--- /dev/null
+++ b/iOSStudy/Cell/STBaseTableViewCell.xib
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/iOSStudy/Constants/EntityConstants.h b/iOSStudy/Constants/EntityConstants.h
new file mode 100644
index 0000000..97defe3
--- /dev/null
+++ b/iOSStudy/Constants/EntityConstants.h
@@ -0,0 +1,15 @@
+//
+// EntityConstants.h
+// iOSStudy
+//
+// Created by chenguandong on 15/4/5.
+// Copyright (c) 2015年 chenguandong. All rights reserved.
+//
+
+#import
+
+extern NSString *const FavouriteBean_title;
+extern NSString *const FavouriteBean_subtitle;
+extern NSString *const FavouriteBean_image_name;
+extern NSString *const FavouriteBean_type;
+extern NSString *const FavouriteBean_url;
diff --git a/iOSStudy/Constants/EntityConstants.m b/iOSStudy/Constants/EntityConstants.m
new file mode 100644
index 0000000..dfcdd0d
--- /dev/null
+++ b/iOSStudy/Constants/EntityConstants.m
@@ -0,0 +1,15 @@
+//
+// EntityConstants.m
+// iOSStudy
+//
+// Created by chenguandong on 15/4/5.
+// Copyright (c) 2015年 chenguandong. All rights reserved.
+//
+
+#import "EntityConstants.h"
+
+NSString *const FavouriteBean_title = @"title";
+NSString *const FavouriteBean_subtitle = @"subtitle";
+NSString *const FavouriteBean_image_name = @"image_name";
+NSString *const FavouriteBean_type = @"type";
+NSString *const FavouriteBean_url = @"url";
diff --git a/iOSStudy/LICENSE b/iOSStudy/LICENSE
new file mode 100644
index 0000000..fd0bea5
--- /dev/null
+++ b/iOSStudy/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 陈冠东
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/iOSStudy/Podfile b/iOSStudy/Podfile
index c770198..a174ed8 100644
--- a/iOSStudy/Podfile
+++ b/iOSStudy/Podfile
@@ -1,9 +1,10 @@
platform :ios, '7.0'
pod "AFNetworking", "~> 2.0"
pod "SDWebImage"
-pod 'FMDB'
pod 'Mantle'
pod 'SVProgressHUD'
pod 'SVWebViewController'
pod 'MJRefresh'
pod 'SWTableViewCell', '~> 0.3.7'
+pod 'Shimmer'
+
diff --git a/iOSStudy/Podfile.lock b/iOSStudy/Podfile.lock
index ee61b81..3671611 100644
--- a/iOSStudy/Podfile.lock
+++ b/iOSStudy/Podfile.lock
@@ -1,59 +1,55 @@
PODS:
- - AFNetworking (2.5.1):
- - AFNetworking/NSURLConnection (= 2.5.1)
- - AFNetworking/NSURLSession (= 2.5.1)
- - AFNetworking/Reachability (= 2.5.1)
- - AFNetworking/Security (= 2.5.1)
- - AFNetworking/Serialization (= 2.5.1)
- - AFNetworking/UIKit (= 2.5.1)
- - AFNetworking/NSURLConnection (2.5.1):
+ - AFNetworking (2.5.3):
+ - AFNetworking/NSURLConnection (= 2.5.3)
+ - AFNetworking/NSURLSession (= 2.5.3)
+ - AFNetworking/Reachability (= 2.5.3)
+ - AFNetworking/Security (= 2.5.3)
+ - AFNetworking/Serialization (= 2.5.3)
+ - AFNetworking/UIKit (= 2.5.3)
+ - AFNetworking/NSURLConnection (2.5.3):
- AFNetworking/Reachability
- AFNetworking/Security
- AFNetworking/Serialization
- - AFNetworking/NSURLSession (2.5.1):
+ - AFNetworking/NSURLSession (2.5.3):
- AFNetworking/Reachability
- AFNetworking/Security
- AFNetworking/Serialization
- - AFNetworking/Reachability (2.5.1)
- - AFNetworking/Security (2.5.1)
- - AFNetworking/Serialization (2.5.1)
- - AFNetworking/UIKit (2.5.1):
+ - AFNetworking/Reachability (2.5.3)
+ - AFNetworking/Security (2.5.3)
+ - AFNetworking/Serialization (2.5.3)
+ - AFNetworking/UIKit (2.5.3):
- AFNetworking/NSURLConnection
- AFNetworking/NSURLSession
- - FMDB (2.5):
- - FMDB/standard (= 2.5)
- - FMDB/common (2.5)
- - FMDB/standard (2.5):
- - FMDB/common
- - Mantle (1.5.4):
- - Mantle/extobjc (= 1.5.4)
- - Mantle/extobjc (1.5.4)
- - MJRefresh (0.0.1)
- - SDWebImage (3.7.1):
- - SDWebImage/Core (= 3.7.1)
- - SDWebImage/Core (3.7.1)
- - SVProgressHUD (1.1.2)
+ - Mantle (2.0):
+ - Mantle/extobjc (= 2.0)
+ - Mantle/extobjc (2.0)
+ - MJRefresh (1.4.6)
+ - SDWebImage (3.7.2):
+ - SDWebImage/Core (= 3.7.2)
+ - SDWebImage/Core (3.7.2)
+ - Shimmer (1.0.2)
+ - SVProgressHUD (1.1.3)
- SVWebViewController (1.0)
- SWTableViewCell (0.3.7)
DEPENDENCIES:
- AFNetworking (~> 2.0)
- - FMDB
- Mantle
- MJRefresh
- SDWebImage
+ - Shimmer
- SVProgressHUD
- SVWebViewController
- SWTableViewCell (~> 0.3.7)
SPEC CHECKSUMS:
- AFNetworking: 8bee59492a6ff15d69130efa4d0dc67e0094a52a
- FMDB: 0efa188cf0dd1ce82c27a478cd5f5fa245308677
- Mantle: d5fbaf30fbc58031223af13812c060e15934a1fe
- MJRefresh: 02638d90855109026754562b7507e5c5eabfcc65
- SDWebImage: 116e88633b5b416ea0ca4b334a4ac59cf72dd38d
- SVProgressHUD: da7a49e789af645d9279ffbca62318945a832438
- SVWebViewController: fbf917baa92744c54cfb89a52a4c056e409973a4
- SWTableViewCell: 25de71898e3fcd11cf75707ef90245acf990ec03
+ AFNetworking: e1d86c2a96bb5d2e7408da36149806706ee122fe
+ Mantle: d7c75b6fb789b20f7ae30cd0d09435fe545896ff
+ MJRefresh: 2eaa3fd8f67fbb86497840fb0167446f7eb61dc7
+ SDWebImage: 71b7cdc1d1721d6a82ed62889030225f2c249e29
+ Shimmer: c5374be1c2b0c9e292fb05b339a513cf291cac86
+ SVProgressHUD: 748080e4f36e603f6c02aec292664239df5279c1
+ SVWebViewController: c36dda7326e81fcae0abf5d02bf7bbf7e41be901
+ SWTableViewCell: 2a94aadc9d47b2b611fa064566bf57948b95b579
COCOAPODS: 0.35.0
diff --git a/iOSStudy/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m b/iOSStudy/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m
index e536f5d..1f93549 100644
--- a/iOSStudy/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m
+++ b/iOSStudy/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m
@@ -57,6 +57,7 @@ @interface AFHTTPRequestOperation ()
@end
@implementation AFHTTPRequestOperation
+@dynamic response;
@dynamic lock;
- (instancetype)initWithRequest:(NSURLRequest *)urlRequest {
diff --git a/iOSStudy/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h b/iOSStudy/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h
index e1fb041..214937e 100644
--- a/iOSStudy/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h
+++ b/iOSStudy/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperationManager.h
@@ -36,6 +36,14 @@
#import "AFSecurityPolicy.h"
#import "AFNetworkReachabilityManager.h"
+#ifndef NS_DESIGNATED_INITIALIZER
+#if __has_attribute(objc_designated_initializer)
+#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
+#else
+#define NS_DESIGNATED_INITIALIZER
+#endif
+#endif
+
/**
`AFHTTPRequestOperationManager` encapsulates the common patterns of communicating with a web application over HTTP, including request creation, response serialization, network reachability monitoring, and security, as well as request operation management.
@@ -151,12 +159,20 @@
/**
The dispatch queue for the `completionBlock` of request operations. If `NULL` (default), the main queue is used.
*/
+#if OS_OBJECT_HAVE_OBJC_SUPPORT
@property (nonatomic, strong) dispatch_queue_t completionQueue;
+#else
+@property (nonatomic, assign) dispatch_queue_t completionQueue;
+#endif
/**
The dispatch group for the `completionBlock` of request operations. If `NULL` (default), a private dispatch group is used.
*/
+#if OS_OBJECT_HAVE_OBJC_SUPPORT
@property (nonatomic, strong) dispatch_group_t completionGroup;
+#else
+@property (nonatomic, assign) dispatch_group_t completionGroup;
+#endif
///---------------------------------------------
/// @name Creating and Initializing HTTP Clients
diff --git a/iOSStudy/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h b/iOSStudy/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h
index bab8245..e77da03 100644
--- a/iOSStudy/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h
+++ b/iOSStudy/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.h
@@ -32,6 +32,14 @@
#import "AFURLSessionManager.h"
+#ifndef NS_DESIGNATED_INITIALIZER
+#if __has_attribute(objc_designated_initializer)
+#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
+#else
+#define NS_DESIGNATED_INITIALIZER
+#endif
+#endif
+
/**
`AFHTTPSessionManager` is a subclass of `AFURLSessionManager` with convenience methods for making HTTP requests. When a `baseURL` is provided, requests made with the `GET` / `POST` / et al. convenience methods can be made with relative paths.
diff --git a/iOSStudy/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m b/iOSStudy/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m
index 3a2323e..5a0fd6f 100644
--- a/iOSStudy/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m
+++ b/iOSStudy/Pods/AFNetworking/AFNetworking/AFHTTPSessionManager.m
@@ -47,6 +47,7 @@ @interface AFHTTPSessionManager ()
@end
@implementation AFHTTPSessionManager
+@dynamic responseSerializer;
+ (instancetype)manager {
return [[[self class] alloc] initWithBaseURL:nil];
diff --git a/iOSStudy/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h b/iOSStudy/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h
index 31ab79b..a458d10 100644
--- a/iOSStudy/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h
+++ b/iOSStudy/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.h
@@ -23,6 +23,14 @@
#import
#import
+#ifndef NS_DESIGNATED_INITIALIZER
+#if __has_attribute(objc_designated_initializer)
+#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
+#else
+#define NS_DESIGNATED_INITIALIZER
+#endif
+#endif
+
typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
AFNetworkReachabilityStatusUnknown = -1,
AFNetworkReachabilityStatusNotReachable = 0,
diff --git a/iOSStudy/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m b/iOSStudy/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m
index 3415e98..fdcffea 100644
--- a/iOSStudy/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m
+++ b/iOSStudy/Pods/AFNetworking/AFNetworking/AFNetworkReachabilityManager.m
@@ -86,7 +86,8 @@ static void AFNetworkReachabilityCallback(SCNetworkReachabilityRef __unused targ
dispatch_async(dispatch_get_main_queue(), ^{
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
- [notificationCenter postNotificationName:AFNetworkingReachabilityDidChangeNotification object:nil userInfo:@{ AFNetworkingReachabilityNotificationStatusItem: @(status) }];
+ NSDictionary *userInfo = @{ AFNetworkingReachabilityNotificationStatusItem: @(status) };
+ [notificationCenter postNotificationName:AFNetworkingReachabilityDidChangeNotification object:nil userInfo:userInfo];
});
}
diff --git a/iOSStudy/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h b/iOSStudy/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h
index 4906f3b..ecf8999 100644
--- a/iOSStudy/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h
+++ b/iOSStudy/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.h
@@ -57,7 +57,7 @@ typedef NS_ENUM(NSUInteger, AFSSLPinningMode) {
@property (nonatomic, assign) BOOL allowInvalidCertificates;
/**
- Whether or not to validate the domain name in the certificate's CN field. Defaults to `YES` for `AFSSLPinningModePublicKey` or `AFSSLPinningModeCertificate`, otherwise `NO`.
+ Whether or not to validate the domain name in the certificate's CN field. Defaults to `YES`.
*/
@property (nonatomic, assign) BOOL validatesDomainName;
diff --git a/iOSStudy/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m b/iOSStudy/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m
index 41576bb..0ff8571 100644
--- a/iOSStudy/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m
+++ b/iOSStudy/Pods/AFNetworking/AFNetworking/AFSecurityPolicy.m
@@ -198,26 +198,11 @@ - (id)init {
}
self.validatesCertificateChain = YES;
+ self.validatesDomainName = YES;
return self;
}
-#pragma mark -
-
-- (void)setSSLPinningMode:(AFSSLPinningMode)SSLPinningMode {
- _SSLPinningMode = SSLPinningMode;
-
- switch (self.SSLPinningMode) {
- case AFSSLPinningModePublicKey:
- case AFSSLPinningModeCertificate:
- self.validatesDomainName = YES;
- break;
- default:
- self.validatesDomainName = NO;
- break;
- }
-}
-
- (void)setPinnedCertificates:(NSArray *)pinnedCertificates {
_pinnedCertificates = pinnedCertificates;
@@ -254,14 +239,21 @@ - (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust
SecTrustSetPolicies(serverTrust, (__bridge CFArrayRef)policies);
- if (self.SSLPinningMode != AFSSLPinningModeNone && !AFServerTrustIsValid(serverTrust) && !self.allowInvalidCertificates) {
+ if (self.SSLPinningMode == AFSSLPinningModeNone) {
+ if (self.allowInvalidCertificates || AFServerTrustIsValid(serverTrust)){
+ return YES;
+ } else {
+ return NO;
+ }
+ } else if (!AFServerTrustIsValid(serverTrust) && !self.allowInvalidCertificates) {
return NO;
}
-
+
NSArray *serverCertificates = AFCertificateTrustChainForServerTrust(serverTrust);
switch (self.SSLPinningMode) {
case AFSSLPinningModeNone:
- return YES;
+ default:
+ return NO;
case AFSSLPinningModeCertificate: {
NSMutableArray *pinnedCertificates = [NSMutableArray array];
for (NSData *certificateData in self.pinnedCertificates) {
diff --git a/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h b/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h
index 7a5eccf..797c7ef 100644
--- a/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h
+++ b/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h
@@ -27,6 +27,14 @@
#import "AFURLResponseSerialization.h"
#import "AFSecurityPolicy.h"
+#ifndef NS_DESIGNATED_INITIALIZER
+#if __has_attribute(objc_designated_initializer)
+#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
+#else
+#define NS_DESIGNATED_INITIALIZER
+#endif
+#endif
+
/**
`AFURLConnectionOperation` is a subclass of `NSOperation` that implements `NSURLConnection` delegate methods.
@@ -189,12 +197,20 @@
/**
The dispatch queue for `completionBlock`. If `NULL` (default), the main queue is used.
*/
+#if OS_OBJECT_HAVE_OBJC_SUPPORT
@property (nonatomic, strong) dispatch_queue_t completionQueue;
+#else
+@property (nonatomic, assign) dispatch_queue_t completionQueue;
+#endif
/**
The dispatch group for `completionBlock`. If `NULL` (default), a private dispatch group is used.
*/
+#if OS_OBJECT_HAVE_OBJC_SUPPORT
@property (nonatomic, strong) dispatch_group_t completionGroup;
+#else
+@property (nonatomic, assign) dispatch_group_t completionGroup;
+#endif
///---------------------------------------------
/// @name Managing Request Operation Information
diff --git a/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m b/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m
index 4c1b9f3..8f602bc 100644
--- a/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m
+++ b/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLRequestSerialization.m
@@ -256,6 +256,47 @@ - (void)dealloc {
#pragma mark -
+// Workarounds for crashing behavior using Key-Value Observing with XCTest
+// See https://github.com/AFNetworking/AFNetworking/issues/2523
+
+- (void)setAllowsCellularAccess:(BOOL)allowsCellularAccess {
+ [self willChangeValueForKey:NSStringFromSelector(@selector(allowsCellularAccess))];
+ _allowsCellularAccess = allowsCellularAccess;
+ [self didChangeValueForKey:NSStringFromSelector(@selector(allowsCellularAccess))];
+}
+
+- (void)setCachePolicy:(NSURLRequestCachePolicy)cachePolicy {
+ [self willChangeValueForKey:NSStringFromSelector(@selector(cachePolicy))];
+ _cachePolicy = cachePolicy;
+ [self didChangeValueForKey:NSStringFromSelector(@selector(cachePolicy))];
+}
+
+- (void)setHTTPShouldHandleCookies:(BOOL)HTTPShouldHandleCookies {
+ [self willChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldHandleCookies))];
+ _HTTPShouldHandleCookies = HTTPShouldHandleCookies;
+ [self didChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldHandleCookies))];
+}
+
+- (void)setHTTPShouldUsePipelining:(BOOL)HTTPShouldUsePipelining {
+ [self willChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldUsePipelining))];
+ _HTTPShouldUsePipelining = HTTPShouldUsePipelining;
+ [self didChangeValueForKey:NSStringFromSelector(@selector(HTTPShouldUsePipelining))];
+}
+
+- (void)setNetworkServiceType:(NSURLRequestNetworkServiceType)networkServiceType {
+ [self willChangeValueForKey:NSStringFromSelector(@selector(networkServiceType))];
+ _networkServiceType = networkServiceType;
+ [self didChangeValueForKey:NSStringFromSelector(@selector(networkServiceType))];
+}
+
+- (void)setTimeoutInterval:(NSTimeInterval)timeoutInterval {
+ [self willChangeValueForKey:NSStringFromSelector(@selector(timeoutInterval))];
+ _timeoutInterval = timeoutInterval;
+ [self didChangeValueForKey:NSStringFromSelector(@selector(timeoutInterval))];
+}
+
+#pragma mark -
+
- (NSDictionary *)HTTPRequestHeaders {
return [NSDictionary dictionaryWithDictionary:self.mutableHTTPRequestHeaders];
}
diff --git a/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m b/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m
index c5a8563..b8e4d1c 100644
--- a/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m
+++ b/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLResponseSerialization.m
@@ -532,7 +532,10 @@ - (id)copyWithZone:(NSZone *)zone {
static UIImage * AFImageWithDataAtScale(NSData *data, CGFloat scale) {
UIImage *image = [[UIImage alloc] initWithData:data];
-
+ if (image.images) {
+ return image;
+ }
+
return [[UIImage alloc] initWithCGImage:[image CGImage] scale:scale orientation:image.imageOrientation];
}
@@ -549,10 +552,11 @@ - (id)copyWithZone:(NSZone *)zone {
} else if ([response.MIMEType isEqualToString:@"image/jpeg"]) {
imageRef = CGImageCreateWithJPEGDataProvider(dataProvider, NULL, true, kCGRenderingIntentDefault);
- // CGImageCreateWithJPEGDataProvider does not properly handle CMKY, so if so, fall back to AFImageWithDataAtScale
if (imageRef) {
CGColorSpaceRef imageColorSpace = CGImageGetColorSpace(imageRef);
CGColorSpaceModel imageColorSpaceModel = CGColorSpaceGetModel(imageColorSpace);
+
+ // CGImageCreateWithJPEGDataProvider does not properly handle CMKY, so fall back to AFImageWithDataAtScale
if (imageColorSpaceModel == kCGColorSpaceModelCMYK) {
CGImageRelease(imageRef);
imageRef = NULL;
@@ -584,7 +588,8 @@ - (id)copyWithZone:(NSZone *)zone {
return image;
}
- size_t bytesPerRow = 0; // CGImageGetBytesPerRow() calculates incorrectly in iOS 5.0, so defer to CGBitmapContextCreate
+ // CGImageGetBytesPerRow() calculates incorrectly in iOS 5.0, so defer to CGBitmapContextCreate
+ size_t bytesPerRow = 0;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGColorSpaceModel colorSpaceModel = CGColorSpaceGetModel(colorSpace);
CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);
diff --git a/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h b/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h
index 966c3e8..584d964 100644
--- a/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h
+++ b/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLSessionManager.h
@@ -27,6 +27,14 @@
#import "AFSecurityPolicy.h"
#import "AFNetworkReachabilityManager.h"
+#ifndef NS_DESIGNATED_INITIALIZER
+#if __has_attribute(objc_designated_initializer)
+#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
+#else
+#define NS_DESIGNATED_INITIALIZER
+#endif
+#endif
+
/**
`AFURLSessionManager` creates and manages an `NSURLSession` object based on a specified `NSURLSessionConfiguration` object, which conforms to ``, ``, ``, and ``.
@@ -152,12 +160,20 @@
/**
The dispatch queue for `completionBlock`. If `NULL` (default), the main queue is used.
*/
+#if OS_OBJECT_HAVE_OBJC_SUPPORT
@property (nonatomic, strong) dispatch_queue_t completionQueue;
+#else
+@property (nonatomic, assign) dispatch_queue_t completionQueue;
+#endif
/**
The dispatch group for `completionBlock`. If `NULL` (default), a private dispatch group is used.
*/
+#if OS_OBJECT_HAVE_OBJC_SUPPORT
@property (nonatomic, strong) dispatch_group_t completionGroup;
+#else
+@property (nonatomic, assign) dispatch_group_t completionGroup;
+#endif
///---------------------------------
/// @name Working Around System Bugs
diff --git a/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m b/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m
index a6ebbee..89bcda9 100644
--- a/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m
+++ b/iOSStudy/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m
@@ -272,6 +272,10 @@ static inline void af_swizzleSelector(Class class, SEL originalSelector, SEL swi
}
}
+static inline void af_addMethod(Class class, SEL selector, Method method) {
+ class_addMethod(class, selector, method_getImplementation(method), method_getTypeEncoding(method));
+}
+
static NSString * const AFNSURLSessionTaskDidResumeNotification = @"com.alamofire.networking.nsurlsessiontask.resume";
static NSString * const AFNSURLSessionTaskDidSuspendNotification = @"com.alamofire.networking.nsurlsessiontask.suspend";
@@ -280,12 +284,18 @@ @interface NSURLSessionTask (_AFStateObserving)
@implementation NSURLSessionTask (_AFStateObserving)
-+ (void)load {
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- af_swizzleSelector([self class], @selector(resume), @selector(af_resume));
- af_swizzleSelector([self class], @selector(suspend), @selector(af_suspend));
- });
++ (void)initialize {
+ if ([NSURLSessionTask class]) {
+ NSURLSessionDataTask *dataTask = [[NSURLSession sessionWithConfiguration:nil] dataTaskWithURL:nil];
+ Class taskClass = [dataTask superclass];
+
+ af_addMethod(taskClass, @selector(af_resume), class_getInstanceMethod(self, @selector(af_resume)));
+ af_addMethod(taskClass, @selector(af_suspend), class_getInstanceMethod(self, @selector(af_suspend)));
+ af_swizzleSelector(taskClass, @selector(resume), @selector(af_resume));
+ af_swizzleSelector(taskClass, @selector(suspend), @selector(af_suspend));
+
+ [dataTask cancel];
+ }
}
#pragma mark -
@@ -402,7 +412,7 @@ - (NSString *)taskDescriptionForSessionTasks {
- (void)taskDidResume:(NSNotification *)notification {
NSURLSessionTask *task = notification.object;
- if ([task isKindOfClass:[NSURLSessionTask class]]) {
+ if ([task respondsToSelector:@selector(taskDescription)]) {
if ([task.taskDescription isEqualToString:self.taskDescriptionForSessionTasks]) {
dispatch_async(dispatch_get_main_queue(), ^{
[[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidResumeNotification object:task];
@@ -413,7 +423,7 @@ - (void)taskDidResume:(NSNotification *)notification {
- (void)taskDidSuspend:(NSNotification *)notification {
NSURLSessionTask *task = notification.object;
- if ([task isKindOfClass:[NSURLSessionTask class]]) {
+ if ([task respondsToSelector:@selector(taskDescription)]) {
if ([task.taskDescription isEqualToString:self.taskDescriptionForSessionTasks]) {
dispatch_async(dispatch_get_main_queue(), ^{
[[NSNotificationCenter defaultCenter] postNotificationName:AFNetworkingTaskDidSuspendNotification object:task];
diff --git a/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m b/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m
index 5c6d4fa..03afaf0 100644
--- a/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m
+++ b/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m
@@ -114,7 +114,9 @@ - (BOOL)isNetworkActivityIndicatorVisible {
}
- (void)updateNetworkActivityIndicatorVisibility {
+#if !defined(AF_APP_EXTENSIONS)
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:[self isNetworkActivityIndicatorVisible]];
+#endif
}
- (void)setActivityCount:(NSInteger)activityCount {
diff --git a/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h b/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h
index 3cc1694..a6f3fc0 100644
--- a/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h
+++ b/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.h
@@ -24,7 +24,7 @@
#import
-#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
+#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && !defined(AF_APP_EXTENSIONS)
#import
diff --git a/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m b/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m
index bb4eabc..6890563 100644
--- a/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m
+++ b/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/UIAlertView+AFNetworking.m
@@ -22,7 +22,7 @@
#import "UIAlertView+AFNetworking.h"
-#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
+#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && !defined(AF_APP_EXTENSIONS)
#import "AFURLConnectionOperation.h"
@@ -62,26 +62,32 @@ + (void)showAlertViewForTaskWithErrorOnCompletion:(NSURLSessionTask *)task
cancelButtonTitle:(NSString *)cancelButtonTitle
otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION
{
- va_list otherTitleList;
- va_start(otherTitleList, otherButtonTitles);
- UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:nil delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:nil, nil];
- for(NSString *otherTitle = otherButtonTitles; otherTitle != nil; otherTitle = va_arg(otherTitleList, NSString *)){
- [alertView addButtonWithTitle:otherTitle];
+ NSMutableArray *mutableOtherTitles = [NSMutableArray array];
+ va_list otherButtonTitleList;
+ va_start(otherButtonTitleList, otherButtonTitles);
+ {
+ for (NSString *otherButtonTitle = otherButtonTitles; otherButtonTitle != nil; otherButtonTitle = va_arg(otherButtonTitleList, NSString *)) {
+ [mutableOtherTitles addObject:otherButtonTitle];
+ }
}
- va_end(otherTitleList);
- __block id observer = [[NSNotificationCenter defaultCenter] addObserverForName:AFNetworkingTaskDidCompleteNotification object:task queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) {
+ va_end(otherButtonTitleList);
+ __block __weak id observer = [[NSNotificationCenter defaultCenter] addObserverForName:AFNetworkingTaskDidCompleteNotification object:task queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) {
NSError *error = notification.userInfo[AFNetworkingTaskDidCompleteErrorKey];
if (error) {
NSString *title, *message;
AFGetAlertViewTitleAndMessageFromError(error, &title, &message);
+ UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:nil delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:nil, nil];
+ for (NSString *otherButtonTitle in mutableOtherTitles) {
+ [alertView addButtonWithTitle:otherButtonTitle];
+ }
[alertView setTitle:title];
[alertView setMessage:message];
[alertView show];
}
- [[NSNotificationCenter defaultCenter] removeObserver:observer name:AFNetworkingTaskDidCompleteNotification object:notification.object];
+ [[NSNotificationCenter defaultCenter] removeObserver:observer];
}];
}
#endif
@@ -99,14 +105,17 @@ + (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOp
cancelButtonTitle:(NSString *)cancelButtonTitle
otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION
{
- va_list otherTitleList;
- va_start(otherTitleList, otherButtonTitles);
- UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:nil delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:nil, nil];
- for(NSString *otherTitle = otherButtonTitles; otherTitle != nil; otherTitle = va_arg(otherTitleList, NSString *)){
- [alertView addButtonWithTitle:otherTitle];
+ NSMutableArray *mutableOtherTitles = [NSMutableArray array];
+ va_list otherButtonTitleList;
+ va_start(otherButtonTitleList, otherButtonTitles);
+ {
+ for (NSString *otherButtonTitle = otherButtonTitles; otherButtonTitle != nil; otherButtonTitle = va_arg(otherButtonTitleList, NSString *)) {
+ [mutableOtherTitles addObject:otherButtonTitle];
+ }
}
- va_end(otherTitleList);
- __block id observer = [[NSNotificationCenter defaultCenter] addObserverForName:AFNetworkingOperationDidFinishNotification object:operation queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) {
+ va_end(otherButtonTitleList);
+
+ __block __weak id observer = [[NSNotificationCenter defaultCenter] addObserverForName:AFNetworkingOperationDidFinishNotification object:operation queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) {
if (notification.object && [notification.object isKindOfClass:[AFURLConnectionOperation class]]) {
NSError *error = [(AFURLConnectionOperation *)notification.object error];
@@ -114,13 +123,17 @@ + (void)showAlertViewForRequestOperationWithErrorOnCompletion:(AFURLConnectionOp
NSString *title, *message;
AFGetAlertViewTitleAndMessageFromError(error, &title, &message);
+ UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:nil delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:nil, nil];
+ for (NSString *otherButtonTitle in mutableOtherTitles) {
+ [alertView addButtonWithTitle:otherButtonTitle];
+ }
[alertView setTitle:title];
[alertView setMessage:message];
[alertView show];
}
}
- [[NSNotificationCenter defaultCenter] removeObserver:observer name:AFNetworkingOperationDidFinishNotification object:notification.object];
+ [[NSNotificationCenter defaultCenter] removeObserver:observer];
}];
}
diff --git a/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h b/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h
index 5838b56..1704ca1 100644
--- a/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h
+++ b/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/UIImageView+AFNetworking.h
@@ -40,7 +40,7 @@
///----------------------------
/**
- The image cache used to improve image loadiing performance on scroll views. By default, this is an `NSCache` subclass conforming to the `AFImageCache` protocol, which listens for notification warnings and evicts objects accordingly.
+ The image cache used to improve image loading performance on scroll views. By default, this is an `NSCache` subclass conforming to the `AFImageCache` protocol, which listens for notification warnings and evicts objects accordingly.
*/
+ (id )sharedImageCache;
diff --git a/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m b/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m
index 4ff13e4..7cc7f37 100644
--- a/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m
+++ b/iOSStudy/Pods/AFNetworking/UIKit+AFNetworking/UIWebView+AFNetworking.m
@@ -136,6 +136,11 @@ - (void)loadRequest:(NSURLRequest *)request
#pragma clang diagnostic ignored "-Wgnu"
__strong __typeof(weakSelf) strongSelf = weakSelf;
[strongSelf loadData:data MIMEType:(MIMEType ?: [operation.response MIMEType]) textEncodingName:(textEncodingName ?: [operation.response textEncodingName]) baseURL:[operation.response URL]];
+
+ if ([strongSelf.delegate respondsToSelector:@selector(webViewDidFinishLoad:)]) {
+ [strongSelf.delegate webViewDidFinishLoad:strongSelf];
+ }
+
#pragma clang diagnostic pop
} failure:^(AFHTTPRequestOperation * __unused operation, NSError *error) {
if (failure) {
@@ -144,6 +149,10 @@ - (void)loadRequest:(NSURLRequest *)request
}];
[self.af_HTTPRequestOperation start];
+
+ if ([self.delegate respondsToSelector:@selector(webViewDidStartLoad:)]) {
+ [self.delegate webViewDidStartLoad:self];
+ }
}
@end
diff --git a/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshComponent.h b/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshComponent.h
new file mode 120000
index 0000000..ae7f688
--- /dev/null
+++ b/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshComponent.h
@@ -0,0 +1 @@
+../../../MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshComponent.h
\ No newline at end of file
diff --git a/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshFooter.h b/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshFooter.h
new file mode 120000
index 0000000..1ae69e3
--- /dev/null
+++ b/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshFooter.h
@@ -0,0 +1 @@
+../../../MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshFooter.h
\ No newline at end of file
diff --git a/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshGifFooter.h b/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshGifFooter.h
new file mode 120000
index 0000000..13717fa
--- /dev/null
+++ b/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshGifFooter.h
@@ -0,0 +1 @@
+../../../MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshGifFooter.h
\ No newline at end of file
diff --git a/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshGifHeader.h b/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshGifHeader.h
new file mode 120000
index 0000000..e4e9f63
--- /dev/null
+++ b/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshGifHeader.h
@@ -0,0 +1 @@
+../../../MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshGifHeader.h
\ No newline at end of file
diff --git a/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshHeader.h b/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshHeader.h
new file mode 120000
index 0000000..5c54c3f
--- /dev/null
+++ b/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshHeader.h
@@ -0,0 +1 @@
+../../../MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshHeader.h
\ No newline at end of file
diff --git a/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshLegendFooter.h b/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshLegendFooter.h
new file mode 120000
index 0000000..9c35a21
--- /dev/null
+++ b/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshLegendFooter.h
@@ -0,0 +1 @@
+../../../MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshLegendFooter.h
\ No newline at end of file
diff --git a/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshLegendHeader.h b/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshLegendHeader.h
new file mode 120000
index 0000000..70f2850
--- /dev/null
+++ b/iOSStudy/Pods/Headers/Public/MJRefresh/MJRefreshLegendHeader.h
@@ -0,0 +1 @@
+../../../MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshLegendHeader.h
\ No newline at end of file
diff --git a/iOSStudy/Pods/Headers/Public/Mantle/MTLTransformerErrorHandling.h b/iOSStudy/Pods/Headers/Public/Mantle/MTLTransformerErrorHandling.h
new file mode 120000
index 0000000..b885860
--- /dev/null
+++ b/iOSStudy/Pods/Headers/Public/Mantle/MTLTransformerErrorHandling.h
@@ -0,0 +1 @@
+../../../Mantle/Mantle/MTLTransformerErrorHandling.h
\ No newline at end of file
diff --git a/iOSStudy/Pods/Headers/Public/Mantle/NSDictionary+MTLJSONKeyPath.h b/iOSStudy/Pods/Headers/Public/Mantle/NSDictionary+MTLJSONKeyPath.h
new file mode 120000
index 0000000..b35a019
--- /dev/null
+++ b/iOSStudy/Pods/Headers/Public/Mantle/NSDictionary+MTLJSONKeyPath.h
@@ -0,0 +1 @@
+../../../Mantle/Mantle/NSDictionary+MTLJSONKeyPath.h
\ No newline at end of file
diff --git a/iOSStudy/Pods/Headers/Public/Mantle/NSDictionary+MTLMappingAdditions.h b/iOSStudy/Pods/Headers/Public/Mantle/NSDictionary+MTLMappingAdditions.h
new file mode 120000
index 0000000..3cd348a
--- /dev/null
+++ b/iOSStudy/Pods/Headers/Public/Mantle/NSDictionary+MTLMappingAdditions.h
@@ -0,0 +1 @@
+../../../Mantle/Mantle/NSDictionary+MTLMappingAdditions.h
\ No newline at end of file
diff --git a/iOSStudy/Pods/Headers/Public/Shimmer/FBShimmering.h b/iOSStudy/Pods/Headers/Public/Shimmer/FBShimmering.h
new file mode 120000
index 0000000..6127444
--- /dev/null
+++ b/iOSStudy/Pods/Headers/Public/Shimmer/FBShimmering.h
@@ -0,0 +1 @@
+../../../Shimmer/FBShimmering/FBShimmering.h
\ No newline at end of file
diff --git a/iOSStudy/Pods/Headers/Public/Shimmer/FBShimmeringLayer.h b/iOSStudy/Pods/Headers/Public/Shimmer/FBShimmeringLayer.h
new file mode 120000
index 0000000..039fed3
--- /dev/null
+++ b/iOSStudy/Pods/Headers/Public/Shimmer/FBShimmeringLayer.h
@@ -0,0 +1 @@
+../../../Shimmer/FBShimmering/FBShimmeringLayer.h
\ No newline at end of file
diff --git a/iOSStudy/Pods/Headers/Public/Shimmer/FBShimmeringView.h b/iOSStudy/Pods/Headers/Public/Shimmer/FBShimmeringView.h
new file mode 120000
index 0000000..9885aa3
--- /dev/null
+++ b/iOSStudy/Pods/Headers/Public/Shimmer/FBShimmeringView.h
@@ -0,0 +1 @@
+../../../Shimmer/FBShimmering/FBShimmeringView.h
\ No newline at end of file
diff --git a/iOSStudy/Pods/MJRefresh/LICENSE b/iOSStudy/Pods/MJRefresh/LICENSE
index 7f7ecfd..11bf234 100644
--- a/iOSStudy/Pods/MJRefresh/LICENSE
+++ b/iOSStudy/Pods/MJRefresh/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2013-2014 MJRefresh (https://github.com/CoderMJLee/MJRefresh)
+Copyright (c) 2013-2015 MJRefresh (https://github.com/CoderMJLee/MJRefresh)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefresh.h b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefresh.h
old mode 100755
new mode 100644
index caebbd9..f3e97fd
--- a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefresh.h
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefresh.h
@@ -1,32 +1,9 @@
-/**
- * 代码地址: https://github.com/CoderMJLee/MJRefresh
- * 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
- * 友情提示: 遇到一些小问题, 最好及时下载最新的代码试试
- */
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
#import "UIScrollView+MJRefresh.h"
-
-/**
- MJ友情提示:
- 1. 添加头部控件的方法
- [self.tableView addHeaderWithTarget:self action:@selector(headerRereshing)];
- 或者
- [self.tableView addHeaderWithCallback:^{ }];
-
- 2. 添加尾部控件的方法
- [self.tableView addFooterWithTarget:self action:@selector(footerRereshing)];
- 或者
- [self.tableView addFooterWithCallback:^{ }];
-
- 3. 可以在MJRefreshConst.h和MJRefreshConst.m文件中自定义显示的文字内容和文字颜色
-
- 4. 本框架兼容iOS6\iOS7,iPhone\iPad横竖屏
-
- 5.自动进入刷新状态
- 1> [self.tableView headerBeginRefreshing];
- 2> [self.tableView footerBeginRefreshing];
-
- 6.结束刷新
- 1> [self.tableView headerEndRefreshing];
- 2> [self.tableView footerEndRefreshing];
-*/
\ No newline at end of file
+#import "MJRefreshGifHeader.h"
+#import "MJRefreshLegendHeader.h"
+#import "MJRefreshGifFooter.h"
+#import "MJRefreshLegendFooter.h"
+#import "MJRefreshConst.h"
\ No newline at end of file
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshComponent.h b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshComponent.h
new file mode 100644
index 0000000..c559da3
--- /dev/null
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshComponent.h
@@ -0,0 +1,37 @@
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
+// MJRefreshComponent.h
+// MJRefreshExample
+//
+// Created by MJ Lee on 15/3/4.
+// Copyright (c) 2015年 itcast. All rights reserved.
+// 刷新组件:基本的开始刷新和结束刷新行为
+
+#import
+
+@interface MJRefreshComponent : UIView
+{
+ UIEdgeInsets _scrollViewOriginalInset;
+ __weak UIScrollView *_scrollView;
+}
+
+#pragma mark - 文字处理
+/** 文字颜色 */
+@property (strong, nonatomic) UIColor *textColor;
+/** 字体大小 */
+@property (strong, nonatomic) UIFont *font;
+
+#pragma mark - 刷新处理
+/** 正在刷新的回调 */
+@property (copy, nonatomic) void (^refreshingBlock)();
+/** 设置回调对象和回调方法 */
+- (void)setRefreshingTarget:(id)target refreshingAction:(SEL)action;
+@property (weak, nonatomic) id refreshingTarget;
+@property (assign, nonatomic) SEL refreshingAction;
+/** 进入刷新状态 */
+- (void)beginRefreshing;
+/** 结束刷新状态 */
+- (void)endRefreshing;
+/** 是否正在刷新 */
+- (BOOL)isRefreshing;
+@end
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshComponent.m b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshComponent.m
new file mode 100644
index 0000000..b336aa2
--- /dev/null
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshComponent.m
@@ -0,0 +1,81 @@
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
+// MJRefreshComponent.m
+// MJRefreshExample
+//
+// Created by MJ Lee on 15/3/4.
+// Copyright (c) 2015年 itcast. All rights reserved.
+//
+
+#import "MJRefreshComponent.h"
+#import "MJRefreshConst.h"
+#import "UIView+MJExtension.h"
+
+@interface MJRefreshComponent()
+/** 记录scrollView刚开始的inset */
+@property (assign, nonatomic) UIEdgeInsets scrollViewOriginalInset;
+/** 父控件 */
+@property (weak, nonatomic) UIScrollView *scrollView;
+@end
+
+@implementation MJRefreshComponent
+#pragma mark - 初始化
+- (instancetype)initWithFrame:(CGRect)frame
+{
+ if (self = [super initWithFrame:frame]) {
+ // 基本属性
+ self.autoresizingMask = UIViewAutoresizingFlexibleWidth;
+ self.backgroundColor = [UIColor clearColor];
+
+ // 默认文字颜色和字体大小
+ self.textColor = MJRefreshLabelTextColor;
+ self.font = MJRefreshLabelFont;
+ }
+ return self;
+}
+
+- (void)willMoveToSuperview:(UIView *)newSuperview
+{
+ [super willMoveToSuperview:newSuperview];
+
+ // 旧的父控件
+ [self.superview removeObserver:self forKeyPath:MJRefreshContentOffset context:nil];
+
+ if (newSuperview) { // 新的父控件
+ [newSuperview addObserver:self forKeyPath:MJRefreshContentOffset options:NSKeyValueObservingOptionNew context:nil];
+
+ // 设置宽度
+ self.mj_w = newSuperview.mj_w;
+ // 设置位置
+ self.mj_x = 0;
+
+ // 记录UIScrollView
+ self.scrollView = (UIScrollView *)newSuperview;
+ // 设置永远支持垂直弹簧效果
+ self.scrollView.alwaysBounceVertical = YES;
+ // 记录UIScrollView最开始的contentInset
+ self.scrollViewOriginalInset = self.scrollView.contentInset;
+ }
+}
+
+#pragma mark - 公共方法
+- (void)setRefreshingTarget:(id)target refreshingAction:(SEL)action
+{
+ self.refreshingTarget = target;
+ self.refreshingAction = action;
+}
+
+- (void)beginRefreshing
+{
+
+}
+
+- (void)endRefreshing
+{
+
+}
+
+- (BOOL)isRefreshing {
+ return NO;
+}
+@end
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshConst.h b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshConst.h
old mode 100755
new mode 100644
index ae71f2a..987ee39
--- a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshConst.h
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshConst.h
@@ -1,41 +1,48 @@
-//
-// MJRefreshConst.h
-// MJRefresh
-//
-// Created by mj on 14-1-3.
-// Copyright (c) 2014年 itcast. All rights reserved.
-//
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
#import
+// 日志输出
#ifdef DEBUG
#define MJLog(...) NSLog(__VA_ARGS__)
#else
#define MJLog(...)
#endif
-// objc_msgSend
+// 过期提醒
+#define MJDeprecated(instead) NS_DEPRECATED(2_0, 2_0, 2_0, 2_0, instead)
+
+// 运行时objc_msgSend
#define msgSend(...) ((void (*)(void *, SEL, UIView *))objc_msgSend)(__VA_ARGS__)
#define msgTarget(target) (__bridge void *)(target)
+// RGB颜色
#define MJColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]
+
// 文字颜色
-#define MJRefreshLabelTextColor MJColor(150, 150, 150)
+#define MJRefreshLabelTextColor MJColor(100, 100, 100)
+
+// 字体大小
+#define MJRefreshLabelFont [UIFont boldSystemFontOfSize:13]
// 图片路径
#define MJRefreshSrcName(file) [@"MJRefresh.bundle" stringByAppendingPathComponent:file]
-UIKIT_EXTERN const CGFloat MJRefreshViewHeight;
+// 常量
+UIKIT_EXTERN const CGFloat MJRefreshHeaderHeight;
+UIKIT_EXTERN const CGFloat MJRefreshFooterHeight;
UIKIT_EXTERN const CGFloat MJRefreshFastAnimationDuration;
UIKIT_EXTERN const CGFloat MJRefreshSlowAnimationDuration;
-UIKIT_EXTERN NSString *const MJRefreshFooterPullToRefresh;
-UIKIT_EXTERN NSString *const MJRefreshFooterReleaseToRefresh;
-UIKIT_EXTERN NSString *const MJRefreshFooterRefreshing;
+UIKIT_EXTERN NSString *const MJRefreshHeaderUpdatedTimeKey;
+UIKIT_EXTERN NSString *const MJRefreshContentOffset;
+UIKIT_EXTERN NSString *const MJRefreshContentSize;
+UIKIT_EXTERN NSString *const MJRefreshPanState;
-UIKIT_EXTERN NSString *const MJRefreshHeaderPullToRefresh;
-UIKIT_EXTERN NSString *const MJRefreshHeaderReleaseToRefresh;
-UIKIT_EXTERN NSString *const MJRefreshHeaderRefreshing;
-UIKIT_EXTERN NSString *const MJRefreshHeaderTimeKey;
+UIKIT_EXTERN NSString *const MJRefreshHeaderStateIdleText;
+UIKIT_EXTERN NSString *const MJRefreshHeaderStatePullingText;
+UIKIT_EXTERN NSString *const MJRefreshHeaderStateRefreshingText;
-UIKIT_EXTERN NSString *const MJRefreshContentOffset;
-extern NSString *const MJRefreshContentSize;
\ No newline at end of file
+UIKIT_EXTERN NSString *const MJRefreshFooterStateIdleText;
+UIKIT_EXTERN NSString *const MJRefreshFooterStateRefreshingText;
+UIKIT_EXTERN NSString *const MJRefreshFooterStateNoMoreDataText;
\ No newline at end of file
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshConst.m b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshConst.m
old mode 100755
new mode 100644
index 8280e44..5d44bdb
--- a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshConst.m
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshConst.m
@@ -1,25 +1,21 @@
-//
-// MJRefreshConst.m
-// MJRefresh
-//
-// Created by mj on 14-1-3.
-// Copyright (c) 2014年 itcast. All rights reserved.
-//
-
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
#import
-const CGFloat MJRefreshViewHeight = 64.0;
+const CGFloat MJRefreshHeaderHeight = 54.0;
+const CGFloat MJRefreshFooterHeight = 44.0;
const CGFloat MJRefreshFastAnimationDuration = 0.25;
const CGFloat MJRefreshSlowAnimationDuration = 0.4;
-NSString *const MJRefreshFooterPullToRefresh = @"上拉可以加载更多数据";
-NSString *const MJRefreshFooterReleaseToRefresh = @"松开立即加载更多数据";
-NSString *const MJRefreshFooterRefreshing = @"正在帮你加载数据...";
+NSString *const MJRefreshHeaderUpdatedTimeKey = @"MJRefreshHeaderUpdatedTimeKey";
+NSString *const MJRefreshContentOffset = @"contentOffset";
+NSString *const MJRefreshContentSize = @"contentSize";
+NSString *const MJRefreshPanState = @"pan.state";
-NSString *const MJRefreshHeaderPullToRefresh = @"下拉可以刷新";
-NSString *const MJRefreshHeaderReleaseToRefresh = @"松开立即刷新";
-NSString *const MJRefreshHeaderRefreshing = @"正在帮你刷新...";
-NSString *const MJRefreshHeaderTimeKey = @"MJRefreshHeaderView";
+NSString *const MJRefreshHeaderStateIdleText = @"下拉可以刷新";
+NSString *const MJRefreshHeaderStatePullingText = @"松开立即刷新";
+NSString *const MJRefreshHeaderStateRefreshingText = @"正在刷新数据中...";
-NSString *const MJRefreshContentOffset = @"contentOffset";
-NSString *const MJRefreshContentSize = @"contentSize";
\ No newline at end of file
+NSString *const MJRefreshFooterStateIdleText = @"点击加载更多";
+NSString *const MJRefreshFooterStateRefreshingText = @"正在加载更多的数据...";
+NSString *const MJRefreshFooterStateNoMoreDataText = @"已经全部加载完毕";
\ No newline at end of file
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshFooter.h b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshFooter.h
new file mode 100644
index 0000000..228a9eb
--- /dev/null
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshFooter.h
@@ -0,0 +1,40 @@
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
+// MJRefreshFooter.h
+// MJRefreshExample
+//
+// Created by MJ Lee on 15/3/5.
+// Copyright (c) 2015年 itcast. All rights reserved.
+//
+
+#import "MJRefreshComponent.h"
+
+typedef enum {
+ MJRefreshFooterStateIdle = 1, // 普通闲置状态
+ MJRefreshFooterStateRefreshing, // 正在刷新中的状态
+ MJRefreshFooterStateNoMoreData // 所有数据加载完毕,没有更多的数据了
+} MJRefreshFooterState;
+
+@interface MJRefreshFooter : MJRefreshComponent
+/** 提示没有更多的数据 */
+- (void)noticeNoMoreData;
+/** 重置没有更多的数据(消除没有更多数据的状态) */
+- (void)resetNoMoreData;
+
+/** 刷新控件的状态(交给子类重写) */
+@property (assign, nonatomic) MJRefreshFooterState state;
+
+/** 是否隐藏状态标签 */
+@property (assign, nonatomic, getter=isStateHidden) BOOL stateHidden;
+
+/**
+ * 设置state状态下的状态文字内容title
+ */
+- (void)setTitle:(NSString *)title forState:(MJRefreshFooterState)state;
+
+/** 是否自动刷新(默认为YES) */
+@property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh;
+
+/** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
+@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh;
+@end
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshFooter.m b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshFooter.m
new file mode 100644
index 0000000..a272da8
--- /dev/null
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshFooter.m
@@ -0,0 +1,325 @@
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
+// MJRefreshFooter.m
+// MJRefreshExample
+//
+// Created by MJ Lee on 15/3/5.
+// Copyright (c) 2015年 itcast. All rights reserved.
+//
+
+#import "MJRefreshFooter.h"
+#import "MJRefreshConst.h"
+#import "UIScrollView+MJExtension.h"
+#import "MJRefreshHeader.h"
+#import "UIView+MJExtension.h"
+#import "UIScrollView+MJRefresh.h"
+#import
+
+@interface MJRefreshFooter()
+/** 显示状态文字的标签 */
+@property (weak, nonatomic) UILabel *stateLabel;
+/** 点击可以加载更多 */
+@property (weak, nonatomic) UIButton *loadMoreButton;
+/** 没有更多的数据 */
+@property (weak, nonatomic) UILabel *noMoreLabel;
+/** 即将要执行的代码 */
+@property (strong, nonatomic) NSMutableArray *willExecuteBlocks;
+@end
+
+@implementation MJRefreshFooter
+#pragma mark - 懒加载
+- (NSMutableArray *)willExecuteBlocks
+{
+ if (!_willExecuteBlocks) {
+ self.willExecuteBlocks = [NSMutableArray array];
+ }
+ return _willExecuteBlocks;
+}
+
+- (UIButton *)loadMoreButton
+{
+ if (!_loadMoreButton) {
+ UIButton *loadMoreButton = [[UIButton alloc] init];
+ loadMoreButton.backgroundColor = [UIColor clearColor];
+ [loadMoreButton addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
+ [self addSubview:_loadMoreButton = loadMoreButton];
+ }
+ return _loadMoreButton;
+}
+
+- (UILabel *)noMoreLabel
+{
+ if (!_noMoreLabel) {
+ UILabel *noMoreLabel = [[UILabel alloc] init];
+ noMoreLabel.backgroundColor = [UIColor clearColor];
+ noMoreLabel.textAlignment = NSTextAlignmentCenter;
+ [self addSubview:_noMoreLabel = noMoreLabel];
+ }
+ return _noMoreLabel;
+}
+
+- (UILabel *)stateLabel
+{
+ if (!_stateLabel) {
+ UILabel *stateLabel = [[UILabel alloc] init];
+ stateLabel.backgroundColor = [UIColor clearColor];
+ stateLabel.textAlignment = NSTextAlignmentCenter;
+ [self addSubview:_stateLabel = stateLabel];
+ }
+ return _stateLabel;
+}
+
+#pragma mark - 初始化方法
+- (instancetype)initWithFrame:(CGRect)frame {
+ if (self = [super initWithFrame:frame]) {
+ // 默认底部控件100%出现时才会自动刷新
+ self.appearencePercentTriggerAutoRefresh = 1.0;
+
+ // 设置为默认状态
+ self.automaticallyRefresh = YES;
+ self.state = MJRefreshFooterStateIdle;
+
+ // 初始化文字
+ [self setTitle:MJRefreshFooterStateIdleText forState:MJRefreshFooterStateIdle];
+ [self setTitle:MJRefreshFooterStateRefreshingText forState:MJRefreshFooterStateRefreshing];
+ [self setTitle:MJRefreshFooterStateNoMoreDataText forState:MJRefreshFooterStateNoMoreData];
+ }
+ return self;
+}
+
+- (void)willMoveToSuperview:(UIView *)newSuperview
+{
+ [super willMoveToSuperview:newSuperview];
+
+ // 旧的父控件
+ [self.superview removeObserver:self forKeyPath:MJRefreshContentSize context:nil];
+ [self.superview removeObserver:self forKeyPath:MJRefreshPanState context:nil];
+
+ if (newSuperview) { // 新的父控件
+ // 监听
+ [newSuperview addObserver:self forKeyPath:MJRefreshContentSize options:NSKeyValueObservingOptionNew context:nil];
+ [newSuperview addObserver:self forKeyPath:MJRefreshPanState options:NSKeyValueObservingOptionNew context:nil];
+
+ self.mj_h = MJRefreshFooterHeight;
+ _scrollView.mj_insetB += self.mj_h;
+
+ // 重新调整frame
+ [self adjustFrameWithContentSize];
+ } else { // 被移除了
+ _scrollView.mj_insetB -= self.mj_h;
+ }
+}
+
+- (void)layoutSubviews
+{
+ [super layoutSubviews];
+
+ self.loadMoreButton.frame = self.bounds;
+ self.stateLabel.frame = self.bounds;
+ self.noMoreLabel.frame = self.bounds;
+}
+
+#pragma mark - 私有方法
+- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
+{
+ // 遇到这些情况就直接返回
+ if (!self.userInteractionEnabled || self.alpha <= 0.01 || self.hidden) return;
+
+ if (self.state == MJRefreshFooterStateIdle) {
+ // 当是Idle状态时,才需要检测是否要进入刷新状态
+ if ([keyPath isEqualToString:MJRefreshPanState]) {
+ if (_scrollView.panGestureRecognizer.state == UIGestureRecognizerStateEnded) {// 手松开
+ if (_scrollView.mj_insetT + _scrollView.mj_contentSizeH <= _scrollView.mj_h) { // 不够一个屏幕
+ if (_scrollView.mj_offsetY > - _scrollView.mj_insetT) { // 向上拽
+ [self beginRefreshing];
+ }
+ } else { // 超出一个屏幕
+ if (_scrollView.mj_offsetY > _scrollView.mj_contentSizeH + _scrollView.mj_insetB - _scrollView.mj_h) {
+ [self beginRefreshing];
+ }
+ }
+ }
+ } else if ([keyPath isEqualToString:MJRefreshContentOffset]) {
+ if (self.state != MJRefreshFooterStateRefreshing && self.automaticallyRefresh) {
+ // 根据contentOffset调整state
+ [self adjustStateWithContentOffset];
+ }
+ }
+ }
+
+ // 不管是什么状态,都要调整位置
+ if ([keyPath isEqualToString:MJRefreshContentSize]) {
+ [self adjustFrameWithContentSize];
+ }
+}
+
+#pragma mark 根据contentOffset调整state
+- (void)adjustStateWithContentOffset
+{
+ if (self.mj_y == 0) return;
+
+ if (_scrollView.mj_insetT + _scrollView.mj_contentSizeH > _scrollView.mj_h) { // 内容超过一个屏幕
+ // 这里的_scrollView.mj_contentSizeH替换掉self.mj_y更为合理
+ if (_scrollView.mj_offsetY > _scrollView.mj_contentSizeH - _scrollView.mj_h + self.mj_h * self.appearencePercentTriggerAutoRefresh + _scrollView.mj_insetB - self.mj_h) {
+ // 当底部刷新控件完全出现时,才刷新
+ [self beginRefreshing];
+ }
+ }
+}
+
+- (void)adjustFrameWithContentSize
+{
+ // 设置位置
+ self.mj_y = _scrollView.mj_contentSizeH;
+}
+
+- (void)buttonClick
+{
+ [self beginRefreshing];
+}
+
+#pragma mark - 公共方法
+- (void)setHidden:(BOOL)hidden
+{
+ __weak typeof(self) weakSelf = self;
+ BOOL lastHidden = weakSelf.isHidden;
+ CGFloat h = weakSelf.mj_h;
+ [weakSelf.willExecuteBlocks addObject:^{
+ if (!lastHidden && hidden) {
+ weakSelf.state = MJRefreshFooterStateIdle;
+ _scrollView.mj_insetB -= h;
+ } else if (lastHidden && !hidden) {
+ _scrollView.mj_insetB += h;
+
+ [weakSelf adjustFrameWithContentSize];
+ }
+ }];
+ [weakSelf setNeedsDisplay]; // 放到drawRect是为了延迟执行,防止因为修改了inset,导致循环调用数据源方法
+
+ [super setHidden:hidden];
+}
+
+- (void)drawRect:(CGRect)rect
+{
+ [super drawRect:rect];
+
+ for (void (^block)() in self.willExecuteBlocks) {
+ block();
+ }
+ [self.willExecuteBlocks removeAllObjects];
+}
+
+- (void)beginRefreshing
+{
+ self.state = MJRefreshFooterStateRefreshing;
+}
+
+- (void)endRefreshing
+{
+ self.state = MJRefreshFooterStateIdle;
+}
+
+- (BOOL)isRefreshing
+{
+ return self.state == MJRefreshFooterStateRefreshing;
+}
+
+- (void)noticeNoMoreData
+{
+ self.state = MJRefreshFooterStateNoMoreData;
+}
+
+- (void)resetNoMoreData
+{
+ self.state = MJRefreshFooterStateIdle;
+}
+
+- (void)setTitle:(NSString *)title forState:(MJRefreshFooterState)state
+{
+ if (title == nil) return;
+
+ // 刷新当前状态的文字
+ switch (state) {
+ case MJRefreshFooterStateIdle:
+ [self.loadMoreButton setTitle:title forState:UIControlStateNormal];
+ break;
+
+ case MJRefreshFooterStateRefreshing:
+ self.stateLabel.text = title;
+ break;
+
+ case MJRefreshFooterStateNoMoreData:
+ self.noMoreLabel.text = title;
+ break;
+
+ default:
+ break;
+ }
+}
+
+- (void)setState:(MJRefreshFooterState)state
+{
+ if (_state == state) return;
+
+ _state = state;
+
+ switch (state) {
+ case MJRefreshFooterStateIdle:
+ self.noMoreLabel.hidden = YES;
+ self.stateLabel.hidden = YES;
+ self.loadMoreButton.hidden = NO;
+ break;
+
+ case MJRefreshFooterStateRefreshing:
+ {
+ self.loadMoreButton.hidden = YES;
+ self.noMoreLabel.hidden = YES;
+ if (!self.stateHidden) self.stateLabel.hidden = NO;
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+ if (self.refreshingBlock) {
+ self.refreshingBlock();
+ }
+ if ([self.refreshingTarget respondsToSelector:self.refreshingAction]) {
+ msgSend(msgTarget(self.refreshingTarget), self.refreshingAction, self);
+ }
+ });
+ }
+ break;
+
+ case MJRefreshFooterStateNoMoreData:
+ self.loadMoreButton.hidden = YES;
+ self.noMoreLabel.hidden = NO;
+ self.stateLabel.hidden = YES;
+ break;
+
+ default:
+ break;
+ }
+}
+
+- (void)setTextColor:(UIColor *)textColor
+{
+ [super setTextColor:textColor];
+
+ self.stateLabel.textColor = textColor;
+ [self.loadMoreButton setTitleColor:textColor forState:UIControlStateNormal];
+ self.noMoreLabel.textColor = textColor;
+}
+
+- (void)setFont:(UIFont *)font
+{
+ [super setFont:font];
+
+ self.loadMoreButton.titleLabel.font = font;
+ self.noMoreLabel.font = font;
+ self.stateLabel.font = font;
+}
+
+- (void)setStateHidden:(BOOL)stateHidden
+{
+ _stateHidden = stateHidden;
+
+ self.stateLabel.hidden = stateHidden;
+ [self setNeedsLayout];
+}
+@end
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshGifFooter.h b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshGifFooter.h
new file mode 100644
index 0000000..56cdfce
--- /dev/null
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshGifFooter.h
@@ -0,0 +1,15 @@
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
+// MJRefreshGifFooter.h
+// MJRefreshExample
+//
+// Created by MJ Lee on 15/3/5.
+// Copyright (c) 2015年 itcast. All rights reserved.
+//
+
+#import "MJRefreshFooter.h"
+
+@interface MJRefreshGifFooter : MJRefreshFooter
+/** 正在刷新时的动画图片 */
+@property (strong, nonatomic) NSArray *refreshingImages;
+@end
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshGifFooter.m b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshGifFooter.m
new file mode 100644
index 0000000..9176827
--- /dev/null
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshGifFooter.m
@@ -0,0 +1,90 @@
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
+// MJRefreshGifFooter.m
+// MJRefreshExample
+//
+// Created by MJ Lee on 15/3/5.
+// Copyright (c) 2015年 itcast. All rights reserved.
+//
+
+#import "MJRefreshGifFooter.h"
+#import "MJRefreshConst.h"
+#import "UIView+MJExtension.h"
+#import "UIScrollView+MJExtension.h"
+
+@interface MJRefreshGifFooter()
+/** 播放动画图片的控件 */
+@property (weak, nonatomic) UIImageView *gifView;
+@end
+
+@implementation MJRefreshGifFooter
+#pragma mark - 懒加载
+- (UIImageView *)gifView
+{
+ if (!_gifView) {
+ UIImageView *gifView = [[UIImageView alloc] init];
+ [self addSubview:_gifView = gifView];
+ }
+ return _gifView;
+}
+
+#pragma mark - 初始化方法
+- (void)layoutSubviews
+{
+ [super layoutSubviews];
+
+ // 指示器
+ self.gifView.frame = self.bounds;
+ if (self.stateHidden) {
+ self.gifView.contentMode = UIViewContentModeCenter;
+ } else {
+ self.gifView.contentMode = UIViewContentModeRight;
+ self.gifView.mj_w = self.mj_w * 0.5 - 90;
+ }
+}
+
+#pragma mark - 公共方法
+- (void)setState:(MJRefreshFooterState)state
+{
+ if (self.state == state) return;
+
+ switch (state) {
+ case MJRefreshFooterStateIdle:
+ self.gifView.hidden = YES;
+ [self.gifView stopAnimating];
+ break;
+
+ case MJRefreshFooterStateRefreshing:
+ self.gifView.hidden = NO;
+ [self.gifView startAnimating];
+ break;
+
+ case MJRefreshFooterStateNoMoreData:
+ self.gifView.hidden = YES;
+ [self.gifView stopAnimating];
+ break;
+
+ default:
+ break;
+ }
+
+ // super里面有回调,应该在最后面调用
+ [super setState:state];
+}
+
+- (void)setRefreshingImages:(NSArray *)refreshingImages
+{
+ _refreshingImages = refreshingImages;
+
+ self.gifView.animationImages = refreshingImages;
+ self.gifView.animationDuration = refreshingImages.count * 0.1;
+
+ // 根据图片设置控件的高度
+ UIImage *image = [refreshingImages firstObject];
+ if (image.size.height > self.mj_h) {
+ _scrollView.mj_insetB -= self.mj_h;
+ self.mj_h = image.size.height;
+ _scrollView.mj_insetB += self.mj_h;
+ }
+}
+@end
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshGifHeader.h b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshGifHeader.h
new file mode 100644
index 0000000..8c1405b
--- /dev/null
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshGifHeader.h
@@ -0,0 +1,15 @@
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
+// MJRefreshGifHeader.h
+// MJRefreshExample
+//
+// Created by MJ Lee on 15/3/4.
+// Copyright (c) 2015年 itcast. All rights reserved.
+// 带有gif图片功能的下拉刷新控件
+
+#import "MJRefreshHeader.h"
+
+@interface MJRefreshGifHeader : MJRefreshHeader
+/** 设置state状态下的动画图片images */
+- (void)setImages:(NSArray *)images forState:(MJRefreshHeaderState)state;
+@end
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshGifHeader.m b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshGifHeader.m
new file mode 100644
index 0000000..ecdf5cc
--- /dev/null
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshGifHeader.m
@@ -0,0 +1,130 @@
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
+// MJRefreshGifHeader.m
+// MJRefreshExample
+//
+// Created by MJ Lee on 15/3/4.
+// Copyright (c) 2015年 itcast. All rights reserved.
+//
+
+#import "MJRefreshGifHeader.h"
+#import "MJRefreshConst.h"
+#import "UIView+MJExtension.h"
+
+@interface MJRefreshGifHeader()
+/** 所有状态对应的动画图片 */
+@property (strong, nonatomic) NSMutableDictionary *stateImages;
+
+/** 播放动画图片的控件 */
+@property (weak, nonatomic) UIImageView *gifView;
+@end
+
+@implementation MJRefreshGifHeader
+#pragma mark - 懒加载
+- (NSMutableDictionary *)stateImages
+{
+ if (!_stateImages) {
+ self.stateImages = [NSMutableDictionary dictionary];
+ }
+ return _stateImages;
+}
+
+- (UIImageView *)gifView
+{
+ if (!_gifView) {
+ UIImageView *gifView = [[UIImageView alloc] init];
+ [self addSubview:_gifView = gifView];
+ }
+ return _gifView;
+}
+
+#pragma mark - 初始化
+- (void)layoutSubviews
+{
+ [super layoutSubviews];
+
+ self.gifView.frame = self.bounds;
+ if (self.stateHidden && self.updatedTimeHidden) {
+ self.gifView.contentMode = UIViewContentModeCenter;
+ } else {
+ self.gifView.contentMode = UIViewContentModeRight;
+ self.gifView.mj_w = self.mj_w * 0.5 - 90;
+ }
+}
+
+#pragma mark - 公共方法
+#pragma mark 设置状态
+- (void)setState:(MJRefreshHeaderState)state
+{
+ if (self.state == state) return;
+
+ // 旧状态
+ MJRefreshHeaderState oldState = self.state;
+
+ NSArray *images = self.stateImages[@(state)];
+ if (images.count != 0) {
+ switch (state) {
+ case MJRefreshHeaderStateIdle: {
+ if (oldState == MJRefreshHeaderStateRefreshing) {
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(MJRefreshSlowAnimationDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+ self.pullingPercent = 0.0;
+ });
+ } else {
+ self.pullingPercent = self.pullingPercent;
+ }
+ break;
+ }
+
+ case MJRefreshHeaderStatePulling:
+ case MJRefreshHeaderStateRefreshing: {
+ [self.gifView stopAnimating];
+ if (images.count == 1) { // 单张图片
+ self.gifView.image = [images lastObject];
+ } else { // 多张图片
+ self.gifView.animationImages = images;
+ self.gifView.animationDuration = images.count * 0.1;
+ [self.gifView startAnimating];
+ }
+ break;
+ }
+
+ default:
+ break;
+ }
+ }
+
+ // super里面有回调,应该在最后面调用
+ [super setState:state];
+}
+
+- (void)setPullingPercent:(CGFloat)pullingPercent
+{
+ [super setPullingPercent:pullingPercent];
+
+ NSArray *images = self.stateImages[@(self.state)];
+ switch (self.state) {
+ case MJRefreshHeaderStateIdle: {
+ [self.gifView stopAnimating];
+ NSUInteger index = images.count * self.pullingPercent;
+ if (index >= images.count) index = images.count - 1;
+ self.gifView.image = images[index];
+ break;
+ }
+ default:
+ break;
+ }
+}
+
+- (void)setImages:(NSArray *)images forState:(MJRefreshHeaderState)state
+{
+ if (images == nil) return;
+
+ self.stateImages[@(state)] = images;
+
+ // 根据图片设置控件的高度
+ UIImage *image = [images firstObject];
+ if (image.size.height > self.mj_h) {
+ self.mj_h = image.size.height;
+ }
+}
+@end
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshHeader.h b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshHeader.h
new file mode 100644
index 0000000..9e83888
--- /dev/null
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshHeader.h
@@ -0,0 +1,47 @@
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
+// MJRefreshHeader.h
+// MJRefreshExample
+//
+// Created by MJ Lee on 15/3/4.
+// Copyright (c) 2015年 itcast. All rights reserved.
+// 下拉刷新控件:负责监控用户下拉的状态
+
+#import "MJRefreshComponent.h"
+
+// 下拉刷新控件的状态
+typedef enum {
+ /** 普通闲置状态 */
+ MJRefreshHeaderStateIdle = 1,
+ /** 松开就可以进行刷新的状态 */
+ MJRefreshHeaderStatePulling,
+ /** 正在刷新中的状态 */
+ MJRefreshHeaderStateRefreshing,
+ /** 即将刷新的状态 */
+ MJRefreshHeaderStateWillRefresh
+} MJRefreshHeaderState;
+
+@interface MJRefreshHeader : MJRefreshComponent
+/** 利用这个key来保存上次的刷新时间(不同界面的刷新控件应该用不同的dateKey,以区分不同界面的刷新时间) */
+@property (copy, nonatomic) NSString *dateKey;
+
+/** 利用这个block来决定显示的更新时间 */
+@property (copy, nonatomic) NSString *(^updatedTimeTitle)(NSDate *updatedTime);
+
+/**
+ * 设置state状态下的状态文字内容title(别直接拿stateLabel修改文字)
+ */
+- (void)setTitle:(NSString *)title forState:(MJRefreshHeaderState)state;
+/** 刷新控件的状态 */
+@property (assign, nonatomic) MJRefreshHeaderState state;
+
+#pragma mark - 文字控件的可见性处理
+/** 是否隐藏状态标签 */
+@property (assign, nonatomic, getter=isStateHidden) BOOL stateHidden;
+/** 是否隐藏刷新时间标签 */
+@property (assign, nonatomic, getter=isUpdatedTimeHidden) BOOL updatedTimeHidden;
+
+#pragma mark - 交给子类重写
+/** 下拉的百分比(交给子类重写) */
+@property (assign, nonatomic) CGFloat pullingPercent;
+@end
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshHeader.m b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshHeader.m
new file mode 100644
index 0000000..8c8a12b
--- /dev/null
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshHeader.m
@@ -0,0 +1,346 @@
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
+// MJRefreshHeader.m
+// MJRefreshExample
+//
+// Created by MJ Lee on 15/3/4.
+// Copyright (c) 2015年 itcast. All rights reserved.
+//
+
+#import "MJRefreshHeader.h"
+#import "MJRefreshConst.h"
+#import "UIView+MJExtension.h"
+#import
+#import "UIScrollView+MJExtension.h"
+
+@interface MJRefreshHeader()
+/** 显示上次刷新时间的标签 */
+@property (weak, nonatomic) UILabel *updatedTimeLabel;
+/** 上次刷新时间 */
+@property (strong, nonatomic) NSDate *updatedTime;
+/** 显示状态文字的标签 */
+@property (weak, nonatomic) UILabel *stateLabel;
+/** 所有状态对应的文字 */
+@property (strong, nonatomic) NSMutableDictionary *stateTitles;
+@end
+
+@implementation MJRefreshHeader
+#pragma mark - 懒加载
+- (NSMutableDictionary *)stateTitles
+{
+ if (!_stateTitles) {
+ self.stateTitles = [NSMutableDictionary dictionary];
+ }
+ return _stateTitles;
+}
+
+- (UILabel *)stateLabel
+{
+ if (!_stateLabel) {
+ UILabel *stateLabel = [[UILabel alloc] init];
+ stateLabel.backgroundColor = [UIColor clearColor];
+ stateLabel.textAlignment = NSTextAlignmentCenter;
+ [self addSubview:_stateLabel = stateLabel];
+ }
+ return _stateLabel;
+}
+
+- (UILabel *)updatedTimeLabel
+{
+ if (!_updatedTimeLabel) {
+ UILabel *updatedTimeLabel = [[UILabel alloc] init];
+ updatedTimeLabel.backgroundColor = [UIColor clearColor];
+ updatedTimeLabel.textAlignment = NSTextAlignmentCenter;
+ [self addSubview:_updatedTimeLabel = updatedTimeLabel];
+ }
+ return _updatedTimeLabel;
+}
+
+#pragma mark - 初始化方法
+- (instancetype)initWithFrame:(CGRect)frame {
+ if (self = [super initWithFrame:frame]) {
+ // 设置默认的dateKey
+ self.dateKey = MJRefreshHeaderUpdatedTimeKey;
+
+ // 设置为默认状态
+ self.state = MJRefreshHeaderStateIdle;
+
+ // 初始化文字
+ [self setTitle:MJRefreshHeaderStateIdleText forState:MJRefreshHeaderStateIdle];
+ [self setTitle:MJRefreshHeaderStatePullingText forState:MJRefreshHeaderStatePulling];
+ [self setTitle:MJRefreshHeaderStateRefreshingText forState:MJRefreshHeaderStateRefreshing];
+ }
+ return self;
+}
+
+- (void)willMoveToSuperview:(UIView *)newSuperview
+{
+ [super willMoveToSuperview:newSuperview];
+
+ if (newSuperview) {
+ self.mj_h = MJRefreshHeaderHeight;
+ }
+}
+
+- (void)drawRect:(CGRect)rect
+{
+ if (self.state == MJRefreshHeaderStateWillRefresh) {
+ self.state = MJRefreshHeaderStateRefreshing;
+ }
+}
+
+- (void)layoutSubviews
+{
+ [super layoutSubviews];
+
+ // 设置自己的位置
+ self.mj_y = - self.mj_h;
+
+ // 2个标签都隐藏
+ if (self.stateHidden && self.updatedTimeHidden) return;
+
+ if (self.updatedTimeHidden) { // 显示状态
+ _stateLabel.frame = self.bounds;
+ } else if (self.stateHidden) { // 显示时间
+ self.updatedTimeLabel.frame = self.bounds;
+ } else { // 都显示
+ CGFloat stateH = self.mj_h * 0.55;
+ CGFloat stateW = self.mj_w;
+ // 1.状态标签
+ _stateLabel.frame = CGRectMake(0, 0, stateW, stateH);
+
+ // 2.时间标签
+ CGFloat updatedTimeY = stateH;
+ CGFloat updatedTimeH = self.mj_h - stateH;
+ CGFloat updatedTimeW = stateW;
+ self.updatedTimeLabel.frame = CGRectMake(0, updatedTimeY, updatedTimeW, updatedTimeH);
+ }
+}
+
+#pragma mark - 私有方法
+- (void)setDateKey:(NSString *)dateKey
+{
+ _dateKey = dateKey ? dateKey : MJRefreshHeaderUpdatedTimeKey;
+
+ self.updatedTime = [[NSUserDefaults standardUserDefaults] objectForKey:_dateKey];
+}
+
+#pragma mark 设置最后的更新时间
+- (void)setUpdatedTime:(NSDate *)updatedTime
+{
+ _updatedTime = updatedTime;
+
+ if (updatedTime) {
+ [[NSUserDefaults standardUserDefaults] setObject:updatedTime forKey:self.dateKey];
+ [[NSUserDefaults standardUserDefaults] synchronize];
+ }
+
+ if (self.updatedTimeTitle) {
+ self.updatedTimeLabel.text = self.updatedTimeTitle(updatedTime);
+ return;
+ }
+
+ if (updatedTime) {
+ // 1.获得年月日
+ NSCalendar *calendar = [NSCalendar currentCalendar];
+ NSUInteger unitFlags = NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay |NSCalendarUnitHour |NSCalendarUnitMinute;
+ NSDateComponents *cmp1 = [calendar components:unitFlags fromDate:updatedTime];
+ NSDateComponents *cmp2 = [calendar components:unitFlags fromDate:[NSDate date]];
+
+ // 2.格式化日期
+ NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+ if ([cmp1 day] == [cmp2 day]) { // 今天
+ formatter.dateFormat = @"今天 HH:mm";
+ } else if ([cmp1 year] == [cmp2 year]) { // 今年
+ formatter.dateFormat = @"MM-dd HH:mm";
+ } else {
+ formatter.dateFormat = @"yyyy-MM-dd HH:mm";
+ }
+ NSString *time = [formatter stringFromDate:updatedTime];
+
+ // 3.显示日期
+ self.updatedTimeLabel.text = [NSString stringWithFormat:@"最后更新:%@", time];
+ } else {
+ self.updatedTimeLabel.text = @"最后更新:无记录";
+ }
+}
+
+#pragma mark KVO属性监听
+- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
+{
+ // 遇到这些情况就直接返回
+ if (!self.userInteractionEnabled || self.alpha <= 0.01 || self.hidden || self.state == MJRefreshHeaderStateRefreshing) return;
+
+ // 根据contentOffset调整state
+ if ([keyPath isEqualToString:MJRefreshContentOffset]) {
+ [self adjustStateWithContentOffset];
+ }
+}
+
+#pragma mark 根据contentOffset调整state
+- (void)adjustStateWithContentOffset
+{
+ if (self.state != MJRefreshHeaderStateRefreshing) {
+ // 在刷新过程中,跳转到下一个控制器时,contentInset可能会变
+ _scrollViewOriginalInset = _scrollView.contentInset;
+ }
+
+ // 在刷新的 refreshing 状态,动态设置 content inset
+ if (self.state == MJRefreshHeaderStateRefreshing ) {
+ if(_scrollView.contentOffset.y >= -_scrollViewOriginalInset.top ) {
+ _scrollView.mj_insetT = _scrollViewOriginalInset.top;
+ } else {
+ _scrollView.mj_insetT = MIN(_scrollViewOriginalInset.top + self.mj_h,
+ _scrollViewOriginalInset.top - _scrollView.contentOffset.y);
+ }
+ return;
+ }
+
+ // 当前的contentOffset
+ CGFloat offsetY = _scrollView.mj_offsetY;
+ // 头部控件刚好出现的offsetY
+ CGFloat happenOffsetY = - _scrollViewOriginalInset.top;
+
+ // 如果是向上滚动到看不见头部控件,直接返回
+ if (offsetY >= happenOffsetY) return;
+
+ // 普通 和 即将刷新 的临界点
+ CGFloat normal2pullingOffsetY = happenOffsetY - self.mj_h;
+ if (_scrollView.isDragging) {
+ self.pullingPercent = (happenOffsetY - offsetY) / self.mj_h;
+
+ if (self.state == MJRefreshHeaderStateIdle && offsetY < normal2pullingOffsetY) {
+ // 转为即将刷新状态
+ self.state = MJRefreshHeaderStatePulling;
+ } else if (self.state == MJRefreshHeaderStatePulling && offsetY >= normal2pullingOffsetY) {
+ // 转为普通状态
+ self.state = MJRefreshHeaderStateIdle;
+ }
+ } else if (self.state == MJRefreshHeaderStatePulling) {// 即将刷新 && 手松开
+ self.pullingPercent = 1.0;
+ // 开始刷新
+ self.state = MJRefreshHeaderStateRefreshing;
+ } else {
+ self.pullingPercent = (happenOffsetY - offsetY) / self.mj_h;
+ }
+}
+
+#pragma mark - 公共方法
+- (void)setTitle:(NSString *)title forState:(MJRefreshHeaderState)state
+{
+ if (title == nil) return;
+ self.stateTitles[@(state)] = title;
+
+ // 刷新当前状态的文字
+ self.stateLabel.text = self.stateTitles[@(self.state)];
+}
+
+- (void)beginRefreshing
+{
+ if (self.window) {
+ self.state = MJRefreshHeaderStateRefreshing;
+ } else {
+ self.state = MJRefreshHeaderStateWillRefresh;
+ // 刷新(预防从另一个控制器回到这个控制器的情况,回来要重新刷新一下)
+ [self setNeedsDisplay];
+ }
+}
+
+- (void)endRefreshing
+{
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.05 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+ self.state = MJRefreshHeaderStateIdle;
+ });
+}
+
+- (BOOL)isRefreshing
+{
+ return self.state == MJRefreshHeaderStateRefreshing;
+}
+
+- (void)setState:(MJRefreshHeaderState)state
+{
+ if (_state == state) return;
+
+ // 旧状态
+ MJRefreshHeaderState oldState = _state;
+
+ // 赋值
+ _state = state;
+
+ // 设置状态文字
+ _stateLabel.text = _stateTitles[@(state)];
+
+ switch (state) {
+ case MJRefreshHeaderStateIdle: {
+ if (oldState == MJRefreshHeaderStateRefreshing) {
+ // 保存刷新时间
+ self.updatedTime = [NSDate date];
+
+ // 恢复inset和offset
+ [UIView animateWithDuration:MJRefreshSlowAnimationDuration delay:0.0 options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionBeginFromCurrentState animations:^{
+ // 修复top值不断累加
+ _scrollView.mj_insetT -= self.mj_h;
+ } completion:nil];
+ }
+ break;
+ }
+
+ case MJRefreshHeaderStateRefreshing: {
+ [UIView animateWithDuration:MJRefreshFastAnimationDuration delay:0.0 options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionBeginFromCurrentState animations:^{
+ // 增加滚动区域
+ CGFloat top = _scrollViewOriginalInset.top + self.mj_h;
+ _scrollView.mj_insetT = top;
+
+ // 设置滚动位置
+ _scrollView.mj_offsetY = - top;
+ } completion:^(BOOL finished) {
+ // 回调
+ if (self.refreshingBlock) {
+ self.refreshingBlock();
+ }
+
+ if ([self.refreshingTarget respondsToSelector:self.refreshingAction]) {
+ msgSend(msgTarget(self.refreshingTarget), self.refreshingAction, self);
+ }
+ }];
+ break;
+ }
+
+ default:
+ break;
+ }
+}
+
+- (void)setTextColor:(UIColor *)textColor
+{
+ [super setTextColor:textColor];
+
+ self.updatedTimeLabel.textColor = textColor;
+ self.stateLabel.textColor = textColor;
+}
+
+- (void)setFont:(UIFont *)font
+{
+ [super setFont:font];
+
+ self.updatedTimeLabel.font = font;
+ self.stateLabel.font = font;
+}
+
+- (void)setStateHidden:(BOOL)stateHidden
+{
+ _stateHidden = stateHidden;
+
+ self.stateLabel.hidden = stateHidden;
+ [self setNeedsLayout];
+}
+
+- (void)setUpdatedTimeHidden:(BOOL)updatedTimeHidden
+{
+ _updatedTimeHidden = updatedTimeHidden;
+
+ self.updatedTimeLabel.hidden = updatedTimeHidden;
+ [self setNeedsLayout];
+}
+@end
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshLegendFooter.h b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshLegendFooter.h
new file mode 100644
index 0000000..b8d06f8
--- /dev/null
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshLegendFooter.h
@@ -0,0 +1,14 @@
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
+// MJRefreshLegendFooter.h
+// MJRefreshExample
+//
+// Created by MJ Lee on 15/3/5.
+// Copyright (c) 2015年 itcast. All rights reserved.
+//
+
+#import "MJRefreshFooter.h"
+
+@interface MJRefreshLegendFooter : MJRefreshFooter
+
+@end
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshLegendFooter.m b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshLegendFooter.m
new file mode 100644
index 0000000..6c70655
--- /dev/null
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshLegendFooter.m
@@ -0,0 +1,68 @@
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
+// MJRefreshLegendFooter.m
+// MJRefreshExample
+//
+// Created by MJ Lee on 15/3/5.
+// Copyright (c) 2015年 itcast. All rights reserved.
+//
+
+#import "MJRefreshLegendFooter.h"
+#import "MJRefreshConst.h"
+#import "UIView+MJExtension.h"
+#import "UIScrollView+MJExtension.h"
+
+@interface MJRefreshLegendFooter()
+@property (nonatomic, weak) UIActivityIndicatorView *activityView;
+@end
+
+@implementation MJRefreshLegendFooter
+#pragma mark - 懒加载
+- (UIActivityIndicatorView *)activityView
+{
+ if (!_activityView) {
+ UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
+ [self addSubview:_activityView = activityView];
+ }
+ return _activityView;
+}
+
+#pragma mark - 初始化方法
+- (void)layoutSubviews
+{
+ [super layoutSubviews];
+
+ // 指示器
+ if (self.stateHidden) {
+ self.activityView.center = CGPointMake(self.mj_w * 0.5, self.mj_h * 0.5);
+ } else {
+ self.activityView.center = CGPointMake(self.mj_w * 0.5 - 100, self.mj_h * 0.5);
+ }
+}
+
+#pragma mark - 公共方法
+- (void)setState:(MJRefreshFooterState)state
+{
+ if (self.state == state) return;
+
+ switch (state) {
+ case MJRefreshFooterStateIdle:
+ [self.activityView stopAnimating];
+ break;
+
+ case MJRefreshFooterStateRefreshing:
+ [self.activityView startAnimating];
+ break;
+
+ case MJRefreshFooterStateNoMoreData:
+ [self.activityView stopAnimating];
+ break;
+
+ default:
+ break;
+ }
+
+ // super里面有回调,应该在最后面调用
+ [super setState:state];
+}
+@end
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshLegendHeader.h b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshLegendHeader.h
new file mode 100644
index 0000000..a2f1969
--- /dev/null
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshLegendHeader.h
@@ -0,0 +1,14 @@
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
+// MJRefreshLegendHeader.h
+// MJRefreshExample
+//
+// Created by MJ Lee on 15/3/4.
+// Copyright (c) 2015年 itcast. All rights reserved.
+// 传统的下拉刷新控件:箭头 + 圈圈
+
+#import "MJRefreshHeader.h"
+
+@interface MJRefreshLegendHeader : MJRefreshHeader
+
+@end
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshLegendHeader.m b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshLegendHeader.m
new file mode 100644
index 0000000..3349b13
--- /dev/null
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshLegendHeader.m
@@ -0,0 +1,103 @@
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
+// MJRefreshLegendHeader.m
+// MJRefreshExample
+//
+// Created by MJ Lee on 15/3/4.
+// Copyright (c) 2015年 itcast. All rights reserved.
+//
+
+#import "MJRefreshLegendHeader.h"
+#import "MJRefreshConst.h"
+#import "UIView+MJExtension.h"
+
+@interface MJRefreshLegendHeader()
+@property (nonatomic, weak) UIImageView *arrowImage;
+@property (nonatomic, weak) UIActivityIndicatorView *activityView;
+@end
+
+@implementation MJRefreshLegendHeader
+#pragma mark - 懒加载
+- (UIImageView *)arrowImage
+{
+ if (!_arrowImage) {
+ UIImageView *arrowImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:MJRefreshSrcName(@"arrow.png")]];
+ [self addSubview:_arrowImage = arrowImage];
+ }
+ return _arrowImage;
+}
+
+- (UIActivityIndicatorView *)activityView
+{
+ if (!_activityView) {
+ UIActivityIndicatorView *activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
+ activityView.bounds = self.arrowImage.bounds;
+ [self addSubview:_activityView = activityView];
+ }
+ return _activityView;
+}
+
+#pragma mark - 初始化
+- (void)layoutSubviews
+{
+ [super layoutSubviews];
+
+ // 箭头
+ CGFloat arrowX = (self.stateHidden && self.updatedTimeHidden) ? self.mj_w * 0.5 : (self.mj_w * 0.5 - 100);
+ self.arrowImage.center = CGPointMake(arrowX, self.mj_h * 0.5);
+
+ // 指示器
+ self.activityView.center = self.arrowImage.center;
+}
+
+#pragma mark - 公共方法
+#pragma mark 设置状态
+- (void)setState:(MJRefreshHeaderState)state
+{
+ if (self.state == state) return;
+
+ // 旧状态
+ MJRefreshHeaderState oldState = self.state;
+
+ switch (state) {
+ case MJRefreshHeaderStateIdle: {
+ if (oldState == MJRefreshHeaderStateRefreshing) {
+ self.arrowImage.transform = CGAffineTransformIdentity;
+
+ [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{
+ self.activityView.alpha = 0.0;
+ } completion:^(BOOL finished) {
+ self.arrowImage.alpha = 1.0;
+ self.activityView.alpha = 1.0;
+ [self.activityView stopAnimating];
+ }];
+ } else {
+ [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
+ self.arrowImage.transform = CGAffineTransformIdentity;
+ }];
+ }
+ break;
+ }
+
+ case MJRefreshHeaderStatePulling: {
+ [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
+ self.arrowImage.transform = CGAffineTransformMakeRotation(0.000001 - M_PI);
+ }];
+ break;
+ }
+
+ case MJRefreshHeaderStateRefreshing: {
+ [self.activityView startAnimating];
+ self.arrowImage.alpha = 0.0;
+ break;
+ }
+
+ default:
+ break;
+ }
+
+ // super里面有回调,应该在最后面调用
+ [super setState:state];
+}
+
+@end
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJExtension.h b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJExtension.h
index 96f5283..9735278 100644
--- a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJExtension.h
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJExtension.h
@@ -1,4 +1,5 @@
-//
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
// UIScrollView+Extension.h
// MJRefreshExample
//
@@ -9,14 +10,14 @@
#import
@interface UIScrollView (MJExtension)
-@property (assign, nonatomic) CGFloat mj_contentInsetTop;
-@property (assign, nonatomic) CGFloat mj_contentInsetBottom;
-@property (assign, nonatomic) CGFloat mj_contentInsetLeft;
-@property (assign, nonatomic) CGFloat mj_contentInsetRight;
+@property (assign, nonatomic) CGFloat mj_insetT;
+@property (assign, nonatomic) CGFloat mj_insetB;
+@property (assign, nonatomic) CGFloat mj_insetL;
+@property (assign, nonatomic) CGFloat mj_insetR;
-@property (assign, nonatomic) CGFloat mj_contentOffsetX;
-@property (assign, nonatomic) CGFloat mj_contentOffsetY;
+@property (assign, nonatomic) CGFloat mj_offsetX;
+@property (assign, nonatomic) CGFloat mj_offsetY;
-@property (assign, nonatomic) CGFloat mj_contentSizeWidth;
-@property (assign, nonatomic) CGFloat mj_contentSizeHeight;
+@property (assign, nonatomic) CGFloat mj_contentSizeW;
+@property (assign, nonatomic) CGFloat mj_contentSizeH;
@end
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJExtension.m b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJExtension.m
index 0a5fe07..dace5a5 100644
--- a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJExtension.m
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJExtension.m
@@ -1,4 +1,5 @@
-//
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
// UIScrollView+Extension.m
// MJRefreshExample
//
@@ -9,98 +10,98 @@
#import "UIScrollView+MJExtension.h"
@implementation UIScrollView (MJExtension)
-- (void)setMj_contentInsetTop:(CGFloat)mj_contentInsetTop
+- (void)setMj_insetT:(CGFloat)mj_insetT
{
UIEdgeInsets inset = self.contentInset;
- inset.top = mj_contentInsetTop;
+ inset.top = mj_insetT;
self.contentInset = inset;
}
-- (CGFloat)mj_contentInsetTop
+- (CGFloat)mj_insetT
{
return self.contentInset.top;
}
-- (void)setMj_contentInsetBottom:(CGFloat)mj_contentInsetBottom
+- (void)setMj_insetB:(CGFloat)mj_insetB
{
UIEdgeInsets inset = self.contentInset;
- inset.bottom = mj_contentInsetBottom;
+ inset.bottom = mj_insetB;
self.contentInset = inset;
}
-- (CGFloat)mj_contentInsetBottom
+- (CGFloat)mj_insetB
{
return self.contentInset.bottom;
}
-- (void)setMj_contentInsetLeft:(CGFloat)mj_contentInsetLeft
+- (void)setMj_insetL:(CGFloat)mj_insetL
{
UIEdgeInsets inset = self.contentInset;
- inset.left = mj_contentInsetLeft;
+ inset.left = mj_insetL;
self.contentInset = inset;
}
-- (CGFloat)mj_contentInsetLeft
+- (CGFloat)mj_insetL
{
return self.contentInset.left;
}
-- (void)setMj_contentInsetRight:(CGFloat)mj_contentInsetRight
+- (void)setMj_insetR:(CGFloat)mj_insetR
{
UIEdgeInsets inset = self.contentInset;
- inset.right = mj_contentInsetRight;
+ inset.right = mj_insetR;
self.contentInset = inset;
}
-- (CGFloat)mj_contentInsetRight
+- (CGFloat)mj_insetR
{
return self.contentInset.right;
}
-- (void)setMj_contentOffsetX:(CGFloat)mj_contentOffsetX
+- (void)setMj_offsetX:(CGFloat)mj_offsetX
{
CGPoint offset = self.contentOffset;
- offset.x = mj_contentOffsetX;
+ offset.x = mj_offsetX;
self.contentOffset = offset;
}
-- (CGFloat)mj_contentOffsetX
+- (CGFloat)mj_offsetX
{
return self.contentOffset.x;
}
-- (void)setMj_contentOffsetY:(CGFloat)mj_contentOffsetY
+- (void)setMj_offsetY:(CGFloat)mj_offsetY
{
CGPoint offset = self.contentOffset;
- offset.y = mj_contentOffsetY;
+ offset.y = mj_offsetY;
self.contentOffset = offset;
}
-- (CGFloat)mj_contentOffsetY
+- (CGFloat)mj_offsetY
{
return self.contentOffset.y;
}
-- (void)setMj_contentSizeWidth:(CGFloat)mj_contentSizeWidth
+- (void)setMj_contentSizeW:(CGFloat)mj_contentSizeW
{
CGSize size = self.contentSize;
- size.width = mj_contentSizeWidth;
+ size.width = mj_contentSizeW;
self.contentSize = size;
}
-- (CGFloat)mj_contentSizeWidth
+- (CGFloat)mj_contentSizeW
{
return self.contentSize.width;
}
-- (void)setMj_contentSizeHeight:(CGFloat)mj_contentSizeHeight
+- (void)setMj_contentSizeH:(CGFloat)mj_contentSizeH
{
CGSize size = self.contentSize;
- size.height = mj_contentSizeHeight;
+ size.height = mj_contentSizeH;
self.contentSize = size;
}
-- (CGFloat)mj_contentSizeHeight
+- (CGFloat)mj_contentSizeH
{
return self.contentSize.height;
}
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJRefresh.h b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJRefresh.h
index e5ae65b..740e4d4 100644
--- a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJRefresh.h
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJRefresh.h
@@ -1,21 +1,143 @@
-//
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
// UIScrollView+MJRefresh.h
// MJRefreshExample
//
-// Created by MJ Lee on 14-5-28.
-// Copyright (c) 2014年 itcast. All rights reserved.
-//
+// Created by MJ Lee on 15/3/4.
+// Copyright (c) 2015年 itcast. All rights reserved.
+// 给ScrollView增加下拉刷新、上拉刷新的功能
#import
+#import "MJRefreshConst.h"
+
+@class MJRefreshGifHeader, MJRefreshLegendHeader, MJRefreshHeader;
+@class MJRefreshGifFooter, MJRefreshLegendFooter, MJRefreshFooter;
@interface UIScrollView (MJRefresh)
+#pragma mark - 访问下拉刷新控件
+/** 下拉刷新控件 */
+@property (strong, nonatomic, readonly) MJRefreshHeader *header;
+/** gif功能的下拉刷新控件 */
+@property (nonatomic, readonly) MJRefreshGifHeader *gifHeader;
+/** 传统的下拉刷新控件 */
+@property (nonatomic, readonly) MJRefreshLegendHeader *legendHeader;
+
+#pragma mark - 添加下拉刷新控件
+/**
+ * 添加一个传统的下拉刷新控件
+ *
+ * @param block 进入刷新状态就会自动调用这个block
+ */
+- (MJRefreshLegendHeader *)addLegendHeaderWithRefreshingBlock:(void (^)())block;
+/**
+ * 添加一个传统的下拉刷新控件
+ *
+ * @param block 进入刷新状态就会自动调用这个block
+ * @param dateKey 用来记录刷新时间的key
+ */
+- (MJRefreshLegendHeader *)addLegendHeaderWithRefreshingBlock:(void (^)())block dateKey:(NSString *)dateKey;
+/**
+ * 添加一个传统的下拉刷新控件
+ *
+ * @param target 进入刷新状态就会自动调用target对象的action方法
+ * @param action 进入刷新状态就会自动调用target对象的action方法
+ */
+- (MJRefreshLegendHeader *)addLegendHeaderWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
+/**
+ * 添加一个传统的下拉刷新控件
+ *
+ * @param target 进入刷新状态就会自动调用target对象的action方法
+ * @param action 进入刷新状态就会自动调用target对象的action方法
+ * @param dateKey 用来记录刷新时间的key
+ */
+- (MJRefreshLegendHeader *)addLegendHeaderWithRefreshingTarget:(id)target refreshingAction:(SEL)action dateKey:(NSString *)dateKey;
+/**
+ * 添加一个gif图片的下拉刷新控件
+ *
+ * @param block 进入刷新状态就会自动调用这个block
+ */
+- (MJRefreshGifHeader *)addGifHeaderWithRefreshingBlock:(void (^)())block;
+/**
+ * 添加一个gif图片的下拉刷新控件
+ *
+ * @param block 进入刷新状态就会自动调用这个block
+ * @param dateKey 用来记录刷新时间的key
+ */
+- (MJRefreshGifHeader *)addGifHeaderWithRefreshingBlock:(void (^)())block dateKey:(NSString *)dateKey;
+/**
+ * 添加一个gif图片的下拉刷新控件
+ *
+ * @param target 进入刷新状态就会自动调用target对象的action方法
+ * @param action 进入刷新状态就会自动调用target对象的action方法
+ */
+- (MJRefreshGifHeader *)addGifHeaderWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
+/**
+ * 添加一个gif图片的下拉刷新控件
+ *
+ * @param target 进入刷新状态就会自动调用target对象的action方法
+ * @param action 进入刷新状态就会自动调用target对象的action方法
+ * @param dateKey 用来记录刷新时间的key
+ */
+- (MJRefreshGifHeader *)addGifHeaderWithRefreshingTarget:(id)target refreshingAction:(SEL)action dateKey:(NSString *)dateKey;
+
+#pragma mark - 移除下拉刷新控件
+/**
+ * 移除下拉刷新控件
+ */
+- (void)removeHeader;
+
+#pragma mark - 访问上拉刷新控件
+/** 上拉刷新控件 */
+@property (strong, nonatomic, readonly) MJRefreshFooter *footer;
+/** gif功能的上拉刷新控件 */
+@property (nonatomic, readonly) MJRefreshGifFooter *gifFooter;
+/** 传统的上拉刷新控件 */
+@property (nonatomic, readonly) MJRefreshLegendFooter *legendFooter;
+
+#pragma mark - 添加上拉刷新控件
+/**
+ * 添加一个传统的上拉刷新控件
+ *
+ * @param block 进入刷新状态就会自动调用这个block
+ */
+- (MJRefreshLegendFooter *)addLegendFooterWithRefreshingBlock:(void (^)())block;
+/**
+ * 添加一个传统的上拉刷新控件
+ *
+ * @param target 进入刷新状态就会自动调用target对象的action方法
+ * @param action 进入刷新状态就会自动调用target对象的action方法
+ */
+- (MJRefreshLegendFooter *)addLegendFooterWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
+/**
+ * 添加一个gif图片的上拉刷新控件
+ *
+ * @param block 进入刷新状态就会自动调用这个block
+ */
+- (MJRefreshGifFooter *)addGifFooterWithRefreshingBlock:(void (^)())block;
+/**
+ * 添加一个gif图片的上拉刷新控件
+ *
+ * @param target 进入刷新状态就会自动调用target对象的action方法
+ * @param action 进入刷新状态就会自动调用target对象的action方法
+ */
+- (MJRefreshGifFooter *)addGifFooterWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
+
+#pragma mark - 移除上拉刷新控件
+/**
+ * 移除上拉刷新控件
+ */
+- (void)removeFooter;
+@end
+
+#pragma mark - 1.0.0版本以前的接口
+@interface UIScrollView(MJRefreshDeprecated)
#pragma mark - 下拉刷新
/**
* 添加一个下拉刷新头部控件
*
* @param callback 回调
*/
-- (void)addHeaderWithCallback:(void (^)())callback;
+- (void)addHeaderWithCallback:(void (^)())callback MJDeprecated("建议使用addLegendHeaderWithRefreshingBlock:");
/**
* 添加一个下拉刷新头部控件
@@ -23,7 +145,7 @@
* @param callback 回调
* @param dateKey 刷新时间保存的key值
*/
-- (void)addHeaderWithCallback:(void (^)())callback dateKey:(NSString*)dateKey;
+- (void)addHeaderWithCallback:(void (^)())callback dateKey:(NSString*)dateKey MJDeprecated("建议使用addLegendHeaderWithRefreshingBlock:dateKey:");
/**
* 添加一个下拉刷新头部控件
@@ -31,7 +153,7 @@
* @param target 目标
* @param action 回调方法
*/
-- (void)addHeaderWithTarget:(id)target action:(SEL)action;
+- (void)addHeaderWithTarget:(id)target action:(SEL)action MJDeprecated("建议使用addLegendHeaderWithRefreshingTarget:refreshingAction:");
/**
* 添加一个下拉刷新头部控件
@@ -40,32 +162,27 @@
* @param action 回调方法
* @param dateKey 刷新时间保存的key值
*/
-- (void)addHeaderWithTarget:(id)target action:(SEL)action dateKey:(NSString*)dateKey;
-
-/**
- * 移除下拉刷新头部控件
- */
-- (void)removeHeader;
+- (void)addHeaderWithTarget:(id)target action:(SEL)action dateKey:(NSString*)dateKey MJDeprecated("建议使用addLegendHeaderWithRefreshingTarget:refreshingAction:dateKey:");
/**
* 主动让下拉刷新头部控件进入刷新状态
*/
-- (void)headerBeginRefreshing;
+- (void)headerBeginRefreshing MJDeprecated("建议使用[self.tableView.header beginRefreshing]");
/**
* 让下拉刷新头部控件停止刷新状态
*/
-- (void)headerEndRefreshing;
+- (void)headerEndRefreshing MJDeprecated("建议使用[self.tableView.header endRefreshing]");
/**
* 下拉刷新头部控件的可见性
*/
-@property (nonatomic, assign, getter = isHeaderHidden) BOOL headerHidden;
+@property (nonatomic, assign, getter = isHeaderHidden) BOOL headerHidden MJDeprecated("建议使用self.tableView.header.hidden");
/**
* 是否正在下拉刷新
*/
-@property (nonatomic, assign, readonly, getter = isHeaderRefreshing) BOOL headerRefreshing;
+@property (nonatomic, assign, readonly, getter = isHeaderRefreshing) BOOL headerRefreshing MJDeprecated("建议使用self.tableView.header.isRefreshing");
#pragma mark - 上拉刷新
/**
@@ -73,7 +190,7 @@
*
* @param callback 回调
*/
-- (void)addFooterWithCallback:(void (^)())callback;
+- (void)addFooterWithCallback:(void (^)())callback MJDeprecated("建议使用addLegendFooterWithRefreshingBlock:");
/**
* 添加一个上拉刷新尾部控件
@@ -81,44 +198,25 @@
* @param target 目标
* @param action 回调方法
*/
-- (void)addFooterWithTarget:(id)target action:(SEL)action;
-
-/**
- * 移除上拉刷新尾部控件
- */
-- (void)removeFooter;
+- (void)addFooterWithTarget:(id)target action:(SEL)action MJDeprecated("建议使用addLegendFooterWithRefreshingTarget:refreshingAction:");
/**
* 主动让上拉刷新尾部控件进入刷新状态
*/
-- (void)footerBeginRefreshing;
+- (void)footerBeginRefreshing MJDeprecated("建议使用[self.tableView.footer beginRefreshing]");
/**
* 让上拉刷新尾部控件停止刷新状态
*/
-- (void)footerEndRefreshing;
+- (void)footerEndRefreshing MJDeprecated("建议使用[self.tableView.footer endRefreshing]");
/**
* 上拉刷新头部控件的可见性
*/
-@property (nonatomic, assign, getter = isFooterHidden) BOOL footerHidden;
+@property (nonatomic, assign, getter = isFooterHidden) BOOL footerHidden MJDeprecated("建议使用self.tableView.footer.hidden");
/**
* 是否正在上拉刷新
*/
-@property (nonatomic, assign, readonly, getter = isFooterRefreshing) BOOL footerRefreshing;
-
-/**
- * 设置尾部控件的文字
- */
-@property (copy, nonatomic) NSString *footerPullToRefreshText; // 默认:@"上拉可以加载更多数据"
-@property (copy, nonatomic) NSString *footerReleaseToRefreshText; // 默认:@"松开立即加载更多数据"
-@property (copy, nonatomic) NSString *footerRefreshingText; // 默认:@"MJ哥正在帮你加载数据..."
-
-/**
- * 设置头部控件的文字
- */
-@property (copy, nonatomic) NSString *headerPullToRefreshText; // 默认:@"下拉可以刷新"
-@property (copy, nonatomic) NSString *headerReleaseToRefreshText; // 默认:@"松开立即刷新"
-@property (copy, nonatomic) NSString *headerRefreshingText; // 默认:@"MJ哥正在帮你刷新..."
+@property (nonatomic, assign, readonly, getter = isFooterRefreshing) BOOL footerRefreshing MJDeprecated("建议使用self.tableView.footer.isRefreshing");
@end
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJRefresh.m b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJRefresh.m
index 74a72b8..2b00a89 100644
--- a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJRefresh.m
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJRefresh.m
@@ -1,52 +1,250 @@
-//
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
// UIScrollView+MJRefresh.m
// MJRefreshExample
//
-// Created by MJ Lee on 14-5-28.
-// Copyright (c) 2014年 itcast. All rights reserved.
+// Created by MJ Lee on 15/3/4.
+// Copyright (c) 2015年 itcast. All rights reserved.
//
#import "UIScrollView+MJRefresh.h"
-#import "MJRefreshHeaderView.h"
-#import "MJRefreshFooterView.h"
+#import "MJRefreshGifHeader.h"
+#import "MJRefreshLegendHeader.h"
+#import "MJRefreshGifFooter.h"
+#import "MJRefreshLegendFooter.h"
#import
-@interface UIScrollView()
-@property (weak, nonatomic) MJRefreshHeaderView *header;
-@property (weak, nonatomic) MJRefreshFooterView *footer;
-@end
+@implementation UIScrollView (MJRefresh)
+#pragma mark - 下拉刷新
+- (MJRefreshLegendHeader *)addLegendHeaderWithRefreshingBlock:(void (^)())block dateKey:(NSString *)dateKey
+{
+ MJRefreshLegendHeader *header = [self addLegendHeader];
+ header.refreshingBlock = block;
+ header.dateKey = dateKey;
+ return header;
+}
+- (MJRefreshLegendHeader *)addLegendHeaderWithRefreshingTarget:(id)target refreshingAction:(SEL)action dateKey:(NSString *)dateKey
+{
+ MJRefreshLegendHeader *header = [self addLegendHeader];
+ header.refreshingTarget = target;
+ header.refreshingAction = action;
+ header.dateKey = dateKey;
+ return header;
+}
-@implementation UIScrollView (MJRefresh)
+- (MJRefreshLegendHeader *)addLegendHeaderWithRefreshingTarget:(id)target refreshingAction:(SEL)action
+{
+ return [self addLegendHeaderWithRefreshingTarget:target refreshingAction:action dateKey:nil];
+}
+
+- (MJRefreshLegendHeader *)addLegendHeaderWithRefreshingBlock:(void (^)())block
+{
+ return [self addLegendHeaderWithRefreshingBlock:block dateKey:nil];
+}
+
+- (MJRefreshLegendHeader *)addLegendHeader
+{
+ MJRefreshLegendHeader *header = [[MJRefreshLegendHeader alloc] init];
+ self.header = header;
+
+ return header;
+}
+
+- (MJRefreshGifHeader *)addGifHeaderWithRefreshingBlock:(void (^)())block dateKey:(NSString *)dateKey
+{
+ MJRefreshGifHeader *header = [self addGifHeader];
+ header.refreshingBlock = block;
+ header.dateKey = dateKey;
+ return header;
+}
+
+- (MJRefreshGifHeader *)addGifHeaderWithRefreshingTarget:(id)target refreshingAction:(SEL)action dateKey:(NSString *)dateKey
+{
+ MJRefreshGifHeader *header = [self addGifHeader];
+ header.refreshingTarget = target;
+ header.refreshingAction = action;
+ header.dateKey = dateKey;
+ return header;
+}
+
+- (MJRefreshGifHeader *)addGifHeaderWithRefreshingBlock:(void (^)())block
+{
+ return [self addGifHeaderWithRefreshingBlock:block dateKey:nil];
+}
+
+- (MJRefreshGifHeader *)addGifHeaderWithRefreshingTarget:(id)target refreshingAction:(SEL)action
+{
+ return [self addGifHeaderWithRefreshingTarget:target refreshingAction:action dateKey:nil];
+}
+
+- (MJRefreshGifHeader *)addGifHeader
+{
+ MJRefreshGifHeader *header = [[MJRefreshGifHeader alloc] init];
+ self.header = header;
+
+ return header;
+}
+
+- (void)removeHeader
+{
+ self.header = nil;
+}
+
+#pragma mark - Property Methods
+#pragma mark gifHeader
+- (MJRefreshGifHeader *)gifHeader
+{
+ if ([self.header isKindOfClass:[MJRefreshGifHeader class]]) {
+ return (MJRefreshGifHeader *)self.header;
+ }
+
+ return nil;
+}
+
+#pragma mark legendHeader
+- (MJRefreshLegendHeader *)legendHeader
+{
+ if ([self.header isKindOfClass:[MJRefreshLegendHeader class]]) {
+ return (MJRefreshLegendHeader *)self.header;
+ }
+
+ return nil;
+}
+
+#pragma mark header
+static char MJRefreshHeaderKey;
+- (void)setHeader:(MJRefreshHeader *)header
+{
+ if (header != self.header) {
+ [self.header removeFromSuperview];
+
+ [self willChangeValueForKey:@"header"];
+ objc_setAssociatedObject(self, &MJRefreshHeaderKey,
+ header,
+ OBJC_ASSOCIATION_ASSIGN);
+ [self didChangeValueForKey:@"header"];
+
+ [self addSubview:header];
+ }
+}
+
+- (MJRefreshHeader *)header
+{
+ return objc_getAssociatedObject(self, &MJRefreshHeaderKey);
+}
+
+#pragma mark - 上拉刷新
+- (MJRefreshLegendFooter *)addLegendFooterWithRefreshingBlock:(void (^)())block
+{
+ MJRefreshLegendFooter *footer = [self addLegendFooter];
+ footer.refreshingBlock = block;
+ return footer;
+}
+
+- (MJRefreshLegendFooter *)addLegendFooterWithRefreshingTarget:(id)target refreshingAction:(SEL)action
+{
+ MJRefreshLegendFooter *footer = [self addLegendFooter];
+ footer.refreshingTarget = target;
+ footer.refreshingAction = action;
+ return footer;
+}
+
+- (MJRefreshLegendFooter *)addLegendFooter
+{
+ MJRefreshLegendFooter *footer = [[MJRefreshLegendFooter alloc] init];
+ self.footer = footer;
+
+ return footer;
+}
+
+- (MJRefreshGifFooter *)addGifFooterWithRefreshingBlock:(void (^)())block
+{
+ MJRefreshGifFooter *footer = [self addGifFooter];
+ footer.refreshingBlock = block;
+ return footer;
+}
-#pragma mark - 运行时相关
-static char MJRefreshHeaderViewKey;
-static char MJRefreshFooterViewKey;
+- (MJRefreshGifFooter *)addGifFooterWithRefreshingTarget:(id)target refreshingAction:(SEL)action
+{
+ MJRefreshGifFooter *footer = [self addGifFooter];
+ footer.refreshingTarget = target;
+ footer.refreshingAction = action;
+ return footer;
+}
-- (void)setHeader:(MJRefreshHeaderView *)header {
- [self willChangeValueForKey:@"MJRefreshHeaderViewKey"];
- objc_setAssociatedObject(self, &MJRefreshHeaderViewKey,
- header,
- OBJC_ASSOCIATION_ASSIGN);
- [self didChangeValueForKey:@"MJRefreshHeaderViewKey"];
+- (MJRefreshGifFooter *)addGifFooter
+{
+ MJRefreshGifFooter *footer = [[MJRefreshGifFooter alloc] init];
+ self.footer = footer;
+
+ return footer;
}
-- (MJRefreshHeaderView *)header {
- return objc_getAssociatedObject(self, &MJRefreshHeaderViewKey);
+- (void)removeFooter
+{
+ self.footer = nil;
}
-- (void)setFooter:(MJRefreshFooterView *)footer {
- [self willChangeValueForKey:@"MJRefreshFooterViewKey"];
- objc_setAssociatedObject(self, &MJRefreshFooterViewKey,
- footer,
- OBJC_ASSOCIATION_ASSIGN);
- [self didChangeValueForKey:@"MJRefreshFooterViewKey"];
+static char MJRefreshFooterKey;
+- (void)setFooter:(MJRefreshFooter *)footer
+{
+ if (footer != self.footer) {
+ [self.footer removeFromSuperview];
+
+ [self willChangeValueForKey:@"footer"];
+ objc_setAssociatedObject(self, &MJRefreshFooterKey,
+ footer,
+ OBJC_ASSOCIATION_ASSIGN);
+ [self didChangeValueForKey:@"footer"];
+
+ [self addSubview:footer];
+ }
}
-- (MJRefreshFooterView *)footer {
- return objc_getAssociatedObject(self, &MJRefreshFooterViewKey);
+- (MJRefreshGifFooter *)gifFooter
+{
+ if ([self.footer isKindOfClass:[MJRefreshGifFooter class]]) {
+ return (MJRefreshGifFooter *)self.footer;
+ }
+ return nil;
+}
+
+- (MJRefreshLegendFooter *)legendFooter
+{
+ if ([self.footer isKindOfClass:[MJRefreshLegendFooter class]]) {
+ return (MJRefreshLegendFooter *)self.footer;
+ }
+ return nil;
}
+
+- (MJRefreshFooter *)footer
+{
+ return objc_getAssociatedObject(self, &MJRefreshFooterKey);
+}
+
+#pragma mark - swizzle
++ (void)load
+{
+ Method method1 = class_getInstanceMethod([self class], NSSelectorFromString(@"dealloc"));
+ Method method2 = class_getInstanceMethod([self class], @selector(deallocSwizzle));
+ method_exchangeImplementations(method1, method2);
+}
+
+- (void)deallocSwizzle
+{
+ [self removeFooter];
+ [self removeHeader];
+
+ [self deallocSwizzle];
+}
+
+@end
+
+
+#pragma mark - 1.0.0版本以前的接口
+@implementation UIScrollView(MJRefreshDeprecated)
#pragma mark - 下拉刷新
/**
* 添加一个下拉刷新头部控件
@@ -58,20 +256,17 @@ - (void)addHeaderWithCallback:(void (^)())callback
[self addHeaderWithCallback:callback dateKey:nil];
}
+/**
+ * 添加一个下拉刷新头部控件
+ *
+ * @param callback 回调
+ * @param dateKey 刷新时间保存的key值
+ */
- (void)addHeaderWithCallback:(void (^)())callback dateKey:(NSString*)dateKey
{
- // 1.创建新的header
- if (!self.header) {
- MJRefreshHeaderView *header = [MJRefreshHeaderView header];
- [self addSubview:header];
- self.header = header;
- }
-
- // 2.设置block回调
- self.header.beginRefreshingCallback = callback;
-
- // 3.设置存储刷新时间的key
+ [self addLegendHeader];
self.header.dateKey = dateKey;
+ self.header.refreshingBlock = callback;
}
/**
@@ -85,30 +280,18 @@ - (void)addHeaderWithTarget:(id)target action:(SEL)action
[self addHeaderWithTarget:target action:action dateKey:nil];
}
-- (void)addHeaderWithTarget:(id)target action:(SEL)action dateKey:(NSString*)dateKey
-{
- // 1.创建新的header
- if (!self.header) {
- MJRefreshHeaderView *header = [MJRefreshHeaderView header];
- [self addSubview:header];
- self.header = header;
- }
-
- // 2.设置目标和回调方法
- self.header.beginRefreshingTaget = target;
- self.header.beginRefreshingAction = action;
-
- // 3.设置存储刷新时间的key
- self.header.dateKey = dateKey;
-}
-
/**
- * 移除下拉刷新头部控件
+ * 添加一个下拉刷新头部控件
+ *
+ * @param target 目标
+ * @param action 回调方法
+ * @param dateKey 刷新时间保存的key值
*/
-- (void)removeHeader
+- (void)addHeaderWithTarget:(id)target action:(SEL)action dateKey:(NSString*)dateKey
{
- [self.header removeFromSuperview];
- self.header = nil;
+ [self addLegendHeader];
+ self.header.dateKey = dateKey;
+ [self.header setRefreshingTarget:target refreshingAction:action];
}
/**
@@ -130,9 +313,9 @@ - (void)headerEndRefreshing
/**
* 下拉刷新头部控件的可见性
*/
-- (void)setHeaderHidden:(BOOL)hidden
+- (void)setHeaderHidden:(BOOL)headerHidden
{
- self.header.hidden = hidden;
+ self.header.hidden = headerHidden;
}
- (BOOL)isHeaderHidden
@@ -140,6 +323,9 @@ - (BOOL)isHeaderHidden
return self.header.isHidden;
}
+/**
+ * 是否正在下拉刷新
+ */
- (BOOL)isHeaderRefreshing
{
return self.header.isRefreshing;
@@ -153,15 +339,8 @@ - (BOOL)isHeaderRefreshing
*/
- (void)addFooterWithCallback:(void (^)())callback
{
- // 1.创建新的footer
- if (!self.footer) {
- MJRefreshFooterView *footer = [MJRefreshFooterView footer];
- [self addSubview:footer];
- self.footer = footer;
- }
-
- // 2.设置block回调
- self.footer.beginRefreshingCallback = callback;
+ [self addLegendFooter];
+ self.footer.refreshingBlock = callback;
}
/**
@@ -172,25 +351,8 @@ - (void)addFooterWithCallback:(void (^)())callback
*/
- (void)addFooterWithTarget:(id)target action:(SEL)action
{
- // 1.创建新的footer
- if (!self.footer) {
- MJRefreshFooterView *footer = [MJRefreshFooterView footer];
- [self addSubview:footer];
- self.footer = footer;
- }
-
- // 2.设置目标和回调方法
- self.footer.beginRefreshingTaget = target;
- self.footer.beginRefreshingAction = action;
-}
-
-/**
- * 移除上拉刷新尾部控件
- */
-- (void)removeFooter
-{
- [self.footer removeFromSuperview];
- self.footer = nil;
+ [self addLegendFooter];
+ [self.footer setRefreshingTarget:target refreshingAction:action];
}
/**
@@ -210,11 +372,11 @@ - (void)footerEndRefreshing
}
/**
- * 下拉刷新头部控件的可见性
+ * 上拉刷新头部控件的可见性
*/
-- (void)setFooterHidden:(BOOL)hidden
+- (void)setFooterHidden:(BOOL)footerHidden
{
- self.footer.hidden = hidden;
+ self.footer.hidden = footerHidden;
}
- (BOOL)isFooterHidden
@@ -222,71 +384,11 @@ - (BOOL)isFooterHidden
return self.footer.isHidden;
}
-- (BOOL)isFooterRefreshing
-{
- return self.footer.isRefreshing;
-}
-
/**
- * 文字
+ * 是否正在上拉刷新
*/
-- (void)setFooterPullToRefreshText:(NSString *)footerPullToRefreshText
-{
- self.footer.pullToRefreshText = footerPullToRefreshText;
-}
-
-- (NSString *)footerPullToRefreshText
-{
- return self.footer.pullToRefreshText;
-}
-
-- (void)setFooterReleaseToRefreshText:(NSString *)footerReleaseToRefreshText
-{
- self.footer.releaseToRefreshText = footerReleaseToRefreshText;
-}
-
-- (NSString *)footerReleaseToRefreshText
-{
- return self.footer.releaseToRefreshText;
-}
-
-- (void)setFooterRefreshingText:(NSString *)footerRefreshingText
-{
- self.footer.refreshingText = footerRefreshingText;
-}
-
-- (NSString *)footerRefreshingText
-{
- return self.footer.refreshingText;
-}
-
-- (void)setHeaderPullToRefreshText:(NSString *)headerPullToRefreshText
-{
- self.header.pullToRefreshText = headerPullToRefreshText;
-}
-
-- (NSString *)headerPullToRefreshText
-{
- return self.header.pullToRefreshText;
-}
-
-- (void)setHeaderReleaseToRefreshText:(NSString *)headerReleaseToRefreshText
-{
- self.header.releaseToRefreshText = headerReleaseToRefreshText;
-}
-
-- (NSString *)headerReleaseToRefreshText
-{
- return self.header.releaseToRefreshText;
-}
-
-- (void)setHeaderRefreshingText:(NSString *)headerRefreshingText
-{
- self.header.refreshingText = headerRefreshingText;
-}
-
-- (NSString *)headerRefreshingText
+- (BOOL)isFooterRefreshing
{
- return self.header.refreshingText;
+ return self.footer.isRefreshing;
}
@end
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIView+MJExtension.h b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIView+MJExtension.h
index 8033456..b4b1346 100644
--- a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIView+MJExtension.h
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIView+MJExtension.h
@@ -1,4 +1,5 @@
-//
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
// UIView+Extension.h
// MJRefreshExample
//
@@ -11,8 +12,8 @@
@interface UIView (MJExtension)
@property (assign, nonatomic) CGFloat mj_x;
@property (assign, nonatomic) CGFloat mj_y;
-@property (assign, nonatomic) CGFloat mj_width;
-@property (assign, nonatomic) CGFloat mj_height;
+@property (assign, nonatomic) CGFloat mj_w;
+@property (assign, nonatomic) CGFloat mj_h;
@property (assign, nonatomic) CGSize mj_size;
@property (assign, nonatomic) CGPoint mj_origin;
@end
diff --git a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIView+MJExtension.m b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIView+MJExtension.m
index a4f8194..1e3efed 100644
--- a/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIView+MJExtension.m
+++ b/iOSStudy/Pods/MJRefresh/MJRefreshExample/MJRefreshExample/MJRefresh/UIView+MJExtension.m
@@ -1,4 +1,5 @@
-//
+// 代码地址: https://github.com/CoderMJLee/MJRefresh
+// 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
// UIView+Extension.m
// MJRefreshExample
//
@@ -33,26 +34,26 @@ - (CGFloat)mj_y
return self.frame.origin.y;
}
-- (void)setMj_width:(CGFloat)mj_width
+- (void)setMj_w:(CGFloat)mj_w
{
CGRect frame = self.frame;
- frame.size.width = mj_width;
+ frame.size.width = mj_w;
self.frame = frame;
}
-- (CGFloat)mj_width
+- (CGFloat)mj_w
{
return self.frame.size.width;
}
-- (void)setMj_height:(CGFloat)mj_height
+- (void)setMj_h:(CGFloat)mj_h
{
CGRect frame = self.frame;
- frame.size.height = mj_height;
+ frame.size.height = mj_h;
self.frame = frame;
}
-- (CGFloat)mj_height
+- (CGFloat)mj_h
{
return self.frame.size.height;
}
diff --git a/iOSStudy/Pods/MJRefresh/README.md b/iOSStudy/Pods/MJRefresh/README.md
index a2e50fa..39b9a5e 100644
--- a/iOSStudy/Pods/MJRefresh/README.md
+++ b/iOSStudy/Pods/MJRefresh/README.md
@@ -1,43 +1,213 @@
## MJRefresh
-The easiest way to use pull-to-refresh
+* The easiest way to use pull-to-refresh
+* 用法最简单的下拉刷新框架:一行代码搞定
-
+## 支持哪些控件的刷新
+* `UIScrollView`、`UITableView`、`UICollectionView`、`UIWebView`
-### 添加头部控件
+## 如何使用MJRefresh
+* cocoapods导入:`pod 'MJRefresh'`
+* 手动导入:
+ * 将`MJRefreshExample/MJRefreshExample/MJRefresh`文件夹中的所有文件拽入项目中
+ * 导入主头文件:`#import "MJRefresh.h"`
```objc
-[self.tableView addHeaderWithTarget:self action:@selector(headerRereshing)];
+MJRefresh.bundle
+MJRefresh.h
+MJRefreshComponent.h MJRefreshComponent.m
+MJRefreshConst.h MJRefreshConst.m
+MJRefreshFooter.h MJRefreshFooter.m
+MJRefreshGifFooter.h MJRefreshGifFooter.m
+MJRefreshGifHeader.h MJRefreshGifHeader.m
+MJRefreshHeader.h MJRefreshHeader.m
+MJRefreshLegendFooter.h MJRefreshLegendFooter.m
+MJRefreshLegendHeader.h MJRefreshLegendHeader.m
+UIScrollView+MJExtension.h UIScrollView+MJExtension.m
+UIScrollView+MJRefresh.h UIScrollView+MJRefresh.m
+UIView+MJExtension.h UIView+MJExtension.m
```
-或者
+
+## 有哪些App正在使用MJRefresh
+
+
+
+* 其他可以关注:[M了个J-博客园](http://www.cnblogs.com/mjios/p/4409853.html)
+
+## 具体用法
+```objc
+* 由于这个框架的功能较多,就不写具体文字描述其用法
+* 大家可以直接参考示例中的MJTableViewController和MJCollectionViewController,更为直观快速
+```
+
+## 下拉刷新01-传统
+
+```objc
+// 添加传统的下拉刷新
+[self.tableView addLegendHeaderWithRefreshingBlock:^{
+ // 进入刷新状态后会自动调用这个block
+}];
+或
+// 添加传统的下拉刷新
+// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
+[self.tableView addLegendHeaderWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
+
+// 马上进入刷新状态
+[self.tableView.header beginRefreshing];
+```
+
+## 下拉刷新02-动画图片
+
+```objc
+// 添加动画图片的下拉刷新
+// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
+[self.tableView addGifHeaderWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
+// 设置普通状态的动画图片
+[self.tableView.gifHeader setImages:idleImages forState:MJRefreshHeaderStateIdle];
+// 设置即将刷新状态的动画图片(一松开就会刷新的状态)
+[self.tableView.gifHeader setImages:pullingImages forState:MJRefreshHeaderStatePulling];
+// 设置正在刷新状态的动画图片
+[self.tableView.gifHeader setImages:refreshingImages forState:MJRefreshHeaderStateRefreshing];
+```
+
+## 下拉刷新03-隐藏时间
+
+```objc
+// 隐藏时间
+self.tableView.header.updatedTimeHidden = YES;
+```
+
+## 下拉刷新04-隐藏状态和时间01
+
```objc
-[self.tableView addHeaderWithCallback:^{ }];
+// 隐藏时间
+self.tableView.header.updatedTimeHidden = YES;
+// 隐藏状态
+self.tableView.header.stateHidden = YES;
```
-### 添加尾部控件
+## 下拉刷新05-隐藏状态和时间02
+
+
+## 下拉刷新06-自定义文字
+
```objc
-[self.tableView addFooterWithTarget:self action:@selector(footerRereshing)];
+// 设置文字
+[self.tableView.header setTitle:@"Pull down to refresh" forState:MJRefreshHeaderStateIdle];
+[self.tableView.header setTitle:@"Release to refresh" forState:MJRefreshHeaderStatePulling];
+[self.tableView.header setTitle:@"Loading ..." forState:MJRefreshHeaderStateRefreshing];
+
+// 设置字体
+self.tableView.header.font = [UIFont systemFontOfSize:15];
+
+// 设置颜色
+self.tableView.header.textColor = [UIColor redColor];
```
-或者
+
+## 上拉刷新01-传统
+
```objc
-[self.tableView addFooterWithCallback:^{ }];
+// 添加传统的上拉刷新
+[self.tableView addLegendFooterWithRefreshingBlock:^{
+ // 进入刷新状态后会自动调用这个block
+}];
+或
+// 添加传统的上拉刷新
+// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
+[self.tableView addLegendFooterWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
```
+
+## 上拉刷新02-动画图片
+
+```objc
+// 添加动画图片的上拉刷新
+// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
+[self.tableView addGifFooterWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
-### 自动进入刷新状态
+// 设置正在刷新状态的动画图片
+self.tableView.gifFooter.refreshingImages = refreshingImages;
+```
+
+## 上拉刷新03-隐藏状态01
+
```objc
-[self.tableView headerBeginRefreshing];
-[self.tableView footerBeginRefreshing];
+// 隐藏状态
+self.tableView.footer.stateHidden = YES;
```
-### 结束刷新
+## 上拉刷新04-隐藏状态02
+
+
+## 上拉刷新05-全部加载完毕
+
+```objc
+// 变为没有更多数据的状态
+[self.tableView.footer noticeNoMoreData];
+```
+
+## 上拉刷新06-禁止自动加载
+
```objc
-[self.tableView headerEndRefreshing];
-[self.tableView footerEndRefreshing];
+// 禁止自动加载
+self.tableView.footer.automaticallyRefresh = NO;
```
+
+## 上拉刷新07-自定义文字
+
+```objc
+// 设置文字
+[self.tableView.footer setTitle:@"Click or drag up to refresh" forState:MJRefreshFooterStateIdle];
+[self.tableView.footer setTitle:@"Loading more ..." forState:MJRefreshFooterStateRefreshing];
+[self.tableView.footer setTitle:@"No more data" forState:MJRefreshFooterStateNoMoreData];
+
+// 设置字体
+self.tableView.footer.font = [UIFont systemFontOfSize:17];
-### 可以在MJRefreshConst.h和MJRefreshConst.m文件中自定义显示的文字内容和文字颜色
+// 设置颜色
+self.tableView.footer.textColor = [UIColor blueColor];
+```
-### 本框架兼容的系统>=iOS6.0,iPhone\iPad横竖屏
+## 上拉刷新08-加载后隐藏
+
+```objc
+// 隐藏当前的上拉刷新控件
+self.tableView.footer.hidden = YES;
+```
+
+## UICollectionView01-上下拉刷新
+
+```objc
+// 添加传统的下拉刷新
+[self.collectionView addLegendHeaderWithRefreshingBlock:^{
+ // 进入刷新状态后会自动调用这个block
+}];
+// 添加传统的上拉刷新
+[self.collectionView addLegendFooterWithRefreshingBlock:^{
+ // 进入刷新状态后会自动调用这个block
+}];
+```
+
+## UIWebView01-下拉刷新
+
+```objc
+// 添加下拉刷新控件
+[self.webView.scrollView addLegendHeaderWithRefreshingBlock:^{
+ // 进入刷新状态后会自动调用这个block
+}];
+```
+
+## 提醒
+* 本框架纯ARC,兼容的系统>=iOS6.0、iPhone\iPad横竖屏
## 期待
-* 如果在使用过程中遇到BUG,希望你能Issues我,谢谢
+* 如果在使用过程中遇到BUG,希望你能Issues我,谢谢(或者尝试下载最新的框架代码看看BUG修复没有)
* 如果在使用过程中发现功能不够用,希望你能Issues我,我非常想为这个框架增加更多好用的功能,谢谢
-* 如果你想为MJRefresh输出代码,请拼命Pull Requests我
\ No newline at end of file
+* 如果你想为MJRefresh输出代码,请拼命Pull Requests我
+* 一起携手打造天朝乃至世界最好用的刷新框架,做天朝程序员的骄傲
+* 如果你开发的应用中用到了MJRefresh,希望你能到[CocoaControls](https://www.cocoacontrols.com/controls/mjrefresh)添加你应用的iTunes路径,我将会安装使用你的应用,并且根据众多应用的使用情况,对MJRefresh进行一个更好的设计和完善,提供更多好用的功能,谢谢
+ * 步骤01(微信是举个例子,百度“你的应用名称 itunes”)
+
+ * 步骤02
+
+ * 步骤03
+
+ * 步骤04
+
diff --git a/iOSStudy/Pods/Manifest.lock b/iOSStudy/Pods/Manifest.lock
index ee61b81..3671611 100644
--- a/iOSStudy/Pods/Manifest.lock
+++ b/iOSStudy/Pods/Manifest.lock
@@ -1,59 +1,55 @@
PODS:
- - AFNetworking (2.5.1):
- - AFNetworking/NSURLConnection (= 2.5.1)
- - AFNetworking/NSURLSession (= 2.5.1)
- - AFNetworking/Reachability (= 2.5.1)
- - AFNetworking/Security (= 2.5.1)
- - AFNetworking/Serialization (= 2.5.1)
- - AFNetworking/UIKit (= 2.5.1)
- - AFNetworking/NSURLConnection (2.5.1):
+ - AFNetworking (2.5.3):
+ - AFNetworking/NSURLConnection (= 2.5.3)
+ - AFNetworking/NSURLSession (= 2.5.3)
+ - AFNetworking/Reachability (= 2.5.3)
+ - AFNetworking/Security (= 2.5.3)
+ - AFNetworking/Serialization (= 2.5.3)
+ - AFNetworking/UIKit (= 2.5.3)
+ - AFNetworking/NSURLConnection (2.5.3):
- AFNetworking/Reachability
- AFNetworking/Security
- AFNetworking/Serialization
- - AFNetworking/NSURLSession (2.5.1):
+ - AFNetworking/NSURLSession (2.5.3):
- AFNetworking/Reachability
- AFNetworking/Security
- AFNetworking/Serialization
- - AFNetworking/Reachability (2.5.1)
- - AFNetworking/Security (2.5.1)
- - AFNetworking/Serialization (2.5.1)
- - AFNetworking/UIKit (2.5.1):
+ - AFNetworking/Reachability (2.5.3)
+ - AFNetworking/Security (2.5.3)
+ - AFNetworking/Serialization (2.5.3)
+ - AFNetworking/UIKit (2.5.3):
- AFNetworking/NSURLConnection
- AFNetworking/NSURLSession
- - FMDB (2.5):
- - FMDB/standard (= 2.5)
- - FMDB/common (2.5)
- - FMDB/standard (2.5):
- - FMDB/common
- - Mantle (1.5.4):
- - Mantle/extobjc (= 1.5.4)
- - Mantle/extobjc (1.5.4)
- - MJRefresh (0.0.1)
- - SDWebImage (3.7.1):
- - SDWebImage/Core (= 3.7.1)
- - SDWebImage/Core (3.7.1)
- - SVProgressHUD (1.1.2)
+ - Mantle (2.0):
+ - Mantle/extobjc (= 2.0)
+ - Mantle/extobjc (2.0)
+ - MJRefresh (1.4.6)
+ - SDWebImage (3.7.2):
+ - SDWebImage/Core (= 3.7.2)
+ - SDWebImage/Core (3.7.2)
+ - Shimmer (1.0.2)
+ - SVProgressHUD (1.1.3)
- SVWebViewController (1.0)
- SWTableViewCell (0.3.7)
DEPENDENCIES:
- AFNetworking (~> 2.0)
- - FMDB
- Mantle
- MJRefresh
- SDWebImage
+ - Shimmer
- SVProgressHUD
- SVWebViewController
- SWTableViewCell (~> 0.3.7)
SPEC CHECKSUMS:
- AFNetworking: 8bee59492a6ff15d69130efa4d0dc67e0094a52a
- FMDB: 0efa188cf0dd1ce82c27a478cd5f5fa245308677
- Mantle: d5fbaf30fbc58031223af13812c060e15934a1fe
- MJRefresh: 02638d90855109026754562b7507e5c5eabfcc65
- SDWebImage: 116e88633b5b416ea0ca4b334a4ac59cf72dd38d
- SVProgressHUD: da7a49e789af645d9279ffbca62318945a832438
- SVWebViewController: fbf917baa92744c54cfb89a52a4c056e409973a4
- SWTableViewCell: 25de71898e3fcd11cf75707ef90245acf990ec03
+ AFNetworking: e1d86c2a96bb5d2e7408da36149806706ee122fe
+ Mantle: d7c75b6fb789b20f7ae30cd0d09435fe545896ff
+ MJRefresh: 2eaa3fd8f67fbb86497840fb0167446f7eb61dc7
+ SDWebImage: 71b7cdc1d1721d6a82ed62889030225f2c249e29
+ Shimmer: c5374be1c2b0c9e292fb05b339a513cf291cac86
+ SVProgressHUD: 748080e4f36e603f6c02aec292664239df5279c1
+ SVWebViewController: c36dda7326e81fcae0abf5d02bf7bbf7e41be901
+ SWTableViewCell: 2a94aadc9d47b2b611fa064566bf57948b95b579
COCOAPODS: 0.35.0
diff --git a/iOSStudy/Pods/Mantle/LICENSE.md b/iOSStudy/Pods/Mantle/LICENSE.md
index 0c46720..4e9825a 100644
--- a/iOSStudy/Pods/Mantle/LICENSE.md
+++ b/iOSStudy/Pods/Mantle/LICENSE.md
@@ -1,4 +1,4 @@
-**Copyright (c) 2012 - 2014, GitHub, Inc.**
+**Copyright (c) GitHub, Inc.**
**All rights reserved.**
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
diff --git a/iOSStudy/Pods/Mantle/Mantle/MTLJSONAdapter.h b/iOSStudy/Pods/Mantle/Mantle/MTLJSONAdapter.h
index 368c5ab..93892d4 100644
--- a/iOSStudy/Pods/Mantle/Mantle/MTLJSONAdapter.h
+++ b/iOSStudy/Pods/Mantle/Mantle/MTLJSONAdapter.h
@@ -8,165 +8,270 @@
#import
-@class MTLModel;
+@protocol MTLModel;
+@protocol MTLTransformerErrorHandling;
-// A MTLModel object that supports being parsed from and serialized to JSON.
-@protocol MTLJSONSerializing
+/// A MTLModel object that supports being parsed from and serialized to JSON.
+@protocol MTLJSONSerializing
@required
-// Specifies how to map property keys to different key paths in JSON.
-//
-// Subclasses overriding this method should combine their values with those of
-// `super`.
-//
-// Any property keys not present in the dictionary are assumed to match the JSON
-// key that should be used. Any keys associated with NSNull will not participate
-// in JSON serialization.
-//
-// Returns a dictionary mapping property keys to JSON key paths (as strings) or
-// NSNull values.
+/// Specifies how to map property keys to different key paths in JSON.
+///
+/// Subclasses overriding this method should combine their values with those of
+/// `super`.
+///
+/// Values in the dictionary can either be key paths in the JSON representation
+/// of the receiver or an array of such key paths. If an array is used, the
+/// deserialized value will be a dictionary containing all of the keys in the
+/// array.
+///
+/// Any keys omitted will not participate in JSON serialization.
+///
+/// Examples
+///
+/// + (NSDictionary *)JSONKeyPathsByPropertyKey {
+/// return @{
+/// @"name": @"POI.name",
+/// @"point": @[ @"latitude", @"longitude" ],
+/// @"starred": @"starred"
+/// };
+/// }
+///
+/// This will map the `starred` property to `JSONDictionary[@"starred"]`, `name`
+/// to `JSONDictionary[@"POI"][@"name"]` and `point` to a dictionary equivalent
+/// to:
+///
+/// @{
+/// @"latitude": JSONDictionary[@"latitude"],
+/// @"longitude": JSONDictionary[@"longitude"]
+/// }
+///
+/// Returns a dictionary mapping property keys to one or multiple JSON key paths
+/// (as strings or arrays of strings).
+ (NSDictionary *)JSONKeyPathsByPropertyKey;
@optional
-// Specifies how to convert a JSON value to the given property key. If
-// reversible, the transformer will also be used to convert the property value
-// back to JSON.
-//
-// If the receiver implements a `+JSONTransformer` method, MTLJSONAdapter
-// will use the result of that method instead.
-//
-// Returns a value transformer, or nil if no transformation should be performed.
+/// Specifies how to convert a JSON value to the given property key. If
+/// reversible, the transformer will also be used to convert the property value
+/// back to JSON.
+///
+/// If the receiver implements a `+JSONTransformer` method, MTLJSONAdapter
+/// will use the result of that method instead.
+///
+/// Returns a value transformer, or nil if no transformation should be performed.
+ (NSValueTransformer *)JSONTransformerForKey:(NSString *)key;
-// Overridden to parse the receiver as a different class, based on information
-// in the provided dictionary.
-//
-// This is mostly useful for class clusters, where the abstract base class would
-// be passed into -[MTLJSONAdapter initWithJSONDictionary:modelClass:], but
-// a subclass should be instantiated instead.
-//
-// JSONDictionary - The JSON dictionary that will be parsed.
-//
-// Returns the class that should be parsed (which may be the receiver), or nil
-// to abort parsing (e.g., if the data is invalid).
+/// Overridden to parse the receiver as a different class, based on information
+/// in the provided dictionary.
+///
+/// This is mostly useful for class clusters, where the abstract base class would
+/// be passed into -[MTLJSONAdapter initWithJSONDictionary:modelClass:], but
+/// a subclass should be instantiated instead.
+///
+/// JSONDictionary - The JSON dictionary that will be parsed.
+///
+/// Returns the class that should be parsed (which may be the receiver), or nil
+/// to abort parsing (e.g., if the data is invalid).
+ (Class)classForParsingJSONDictionary:(NSDictionary *)JSONDictionary;
@end
-// The domain for errors originating from MTLJSONAdapter.
+/// The domain for errors originating from MTLJSONAdapter.
extern NSString * const MTLJSONAdapterErrorDomain;
-// +classForParsingJSONDictionary: returned nil for the given dictionary.
+/// +classForParsingJSONDictionary: returned nil for the given dictionary.
extern const NSInteger MTLJSONAdapterErrorNoClassFound;
-// The provided JSONDictionary is not valid.
+/// The provided JSONDictionary is not valid.
extern const NSInteger MTLJSONAdapterErrorInvalidJSONDictionary;
-// The model's implementation of +JSONKeyPathsByPropertyKey included a key which
-// does not actually exist in +propertyKeys.
+/// The model's implementation of +JSONKeyPathsByPropertyKey included a key which
+/// does not actually exist in +propertyKeys.
extern const NSInteger MTLJSONAdapterErrorInvalidJSONMapping;
-// Converts a MTLModel object to and from a JSON dictionary.
+/// Converts a MTLModel object to and from a JSON dictionary.
@interface MTLJSONAdapter : NSObject
-// The model object that the receiver was initialized with, or that the receiver
-// parsed from a JSON dictionary.
-@property (nonatomic, strong, readonly) MTLModel *model;
-
-// Attempts to parse a JSON dictionary into a model object.
-//
-// modelClass - The MTLModel subclass to attempt to parse from the JSON.
-// This class must conform to . This
-// argument must not be nil.
-// JSONDictionary - A dictionary representing JSON data. This should match the
-// format returned by NSJSONSerialization. If this argument is
-// nil, the method returns nil.
-// error - If not NULL, this may be set to an error that occurs during
-// parsing or initializing an instance of `modelClass`.
-//
-// Returns an instance of `modelClass` upon success, or nil if a parsing error
-// occurred.
+/// Attempts to parse a JSON dictionary into a model object.
+///
+/// modelClass - The MTLModel subclass to attempt to parse from the JSON.
+/// This class must conform to . This
+/// argument must not be nil.
+/// JSONDictionary - A dictionary representing JSON data. This should match the
+/// format returned by NSJSONSerialization. If this argument is
+/// nil, the method returns nil.
+/// error - If not NULL, this may be set to an error that occurs during
+/// parsing or initializing an instance of `modelClass`.
+///
+/// Returns an instance of `modelClass` upon success, or nil if a parsing error
+/// occurred.
+ (id)modelOfClass:(Class)modelClass fromJSONDictionary:(NSDictionary *)JSONDictionary error:(NSError **)error;
-// Attempts to parse an array of JSON dictionary objects into a model objects
-// of a specific class.
-//
-// modelClass - The MTLModel subclass to attempt to parse from the JSON. This
-// class must conform to . This argument must
-// not be nil.
-// JSONArray - A array of dictionaries representing JSON data. This should
-// match the format returned by NSJSONSerialization. If this
-// argument is nil, the method returns nil.
-// error - If not NULL, this may be set to an error that occurs during
-// parsing or initializing an any of the instances of
-// `modelClass`.
-//
-// Returns an array of `modelClass` instances upon success, or nil if a parsing
-// error occurred.
+/// Attempts to parse an array of JSON dictionary objects into a model objects
+/// of a specific class.
+///
+/// modelClass - The MTLModel subclass to attempt to parse from the JSON. This
+/// class must conform to . This argument must
+/// not be nil.
+/// JSONArray - A array of dictionaries representing JSON data. This should
+/// match the format returned by NSJSONSerialization. If this
+/// argument is nil, the method returns nil.
+/// error - If not NULL, this may be set to an error that occurs during
+/// parsing or initializing an any of the instances of
+/// `modelClass`.
+///
+/// Returns an array of `modelClass` instances upon success, or nil if a parsing
+/// error occurred.
+ (NSArray *)modelsOfClass:(Class)modelClass fromJSONArray:(NSArray *)JSONArray error:(NSError **)error;
-// Converts a model into a JSON representation.
-//
-// model - The model to use for JSON serialization. This argument must not be
-// nil.
-//
-// Returns a JSON dictionary, or nil if a serialization error occurred.
-+ (NSDictionary *)JSONDictionaryFromModel:(MTLModel *)model;
+/// Converts a model into a JSON representation.
+///
+/// model - The model to use for JSON serialization. This argument must not be
+/// nil.
+/// error - If not NULL, this may be set to an error that occurs during
+/// serializing.
+///
+/// Returns a JSON dictionary, or nil if a serialization error occurred.
++ (NSDictionary *)JSONDictionaryFromModel:(id)model error:(NSError **)error;
-// Converts a array of models into a JSON representation.
-//
-// models - The array of models to use for JSON serialization. This argument
-// must not be nil.
-//
-// Returns a JSON array, or nil if a serialization error occurred for any
-// model.
-+ (NSArray *)JSONArrayFromModels:(NSArray *)models;
+/// Converts a array of models into a JSON representation.
+///
+/// models - The array of models to use for JSON serialization. This argument
+/// must not be nil.
+/// error - If not NULL, this may be set to an error that occurs during
+/// serializing.
+///
+/// Returns a JSON array, or nil if a serialization error occurred for any
+/// model.
++ (NSArray *)JSONArrayFromModels:(NSArray *)models error:(NSError **)error;
-// Initializes the receiver by attempting to parse a JSON dictionary into
-// a model object.
-//
-// JSONDictionary - A dictionary representing JSON data. This should match the
-// format returned by NSJSONSerialization. If this argument is
-// nil, the method returns nil and an error with code
-// MTLJSONAdapterErrorInvalidJSONDictionary.
-// modelClass - The MTLModel subclass to attempt to parse from the JSON.
-// This class must conform to . This
-// argument must not be nil.
-// error - If not NULL, this may be set to an error that occurs during
-// parsing or initializing an instance of `modelClass`.
-//
-// Returns an initialized adapter upon success, or nil if a parsing error
-// occurred.
-- (id)initWithJSONDictionary:(NSDictionary *)JSONDictionary modelClass:(Class)modelClass error:(NSError **)error;
+/// Initializes the receiver with a given model class.
+///
+/// modelClass - The MTLModel subclass to attempt to parse from the JSON and
+/// back. This class must conform to . This
+/// argument must not be nil.
+///
+/// Returns an initialized adapter.
+- (id)initWithModelClass:(Class)modelClass;
-// Initializes the receiver with an existing model.
-//
-// model - The model to use for JSON serialization. This argument must not be
-// nil.
-- (id)initWithModel:(MTLModel *)model;
+/// Deserializes a model from a JSON dictionary.
+///
+/// The adapter will call -validate: on the model and consider it an error if the
+/// validation fails.
+///
+/// JSONDictionary - A dictionary representing JSON data. This should match the
+/// format returned by NSJSONSerialization. This argument must
+/// not be nil.
+/// error - If not NULL, this may be set to an error that occurs during
+/// deserializing or validation.
+///
+/// Returns a model object, or nil if a deserialization error occurred or the
+/// model did not validate successfully.
+- (id)modelFromJSONDictionary:(NSDictionary *)JSONDictionary error:(NSError **)error;
-// Serializes the receiver's `model` into JSON.
-//
-// Returns a JSON dictionary, or nil if a serialization error occurred.
-- (NSDictionary *)JSONDictionary;
+/// Serializes a model into JSON.
+///
+/// model - The model to use for JSON serialization. This argument must not be
+/// nil.
+/// error - If not NULL, this may be set to an error that occurs during
+/// serializing.
+///
+/// Returns a model object, or nil if a serialization error occurred.
+- (NSDictionary *)JSONDictionaryFromModel:(id)model error:(NSError **)error;
-// Looks up the JSON key path in the model's +propertyKeys.
-//
-// Subclasses may override this method to customize the adapter's seralizing
-// behavior. You should not call this method directly.
-//
-// key - The property key to retrieve the corresponding JSON key path for. This
-// argument must not be nil.
-//
-// Returns a key path to use, or nil to omit the property from JSON.
-- (NSString *)JSONKeyPathForPropertyKey:(NSString *)key;
+/// Filters the property keys used to serialize a given model.
+///
+/// propertyKeys - The property keys for which `model` provides a mapping.
+/// model - The model being serialized.
+///
+/// Subclasses may override this method to determine which property keys should
+/// be used when serializing `model`. For instance, this method can be used to
+/// create more efficient updates of server-side resources.
+///
+/// The default implementation simply returns `propertyKeys`.
+///
+/// Returns a subset of propertyKeys that should be serialized for a given
+/// model.
+- (NSSet *)serializablePropertyKeys:(NSSet *)propertyKeys forModel:(id)model;
+
+/// An optional value transformer that should be used for properties of the given
+/// class.
+///
+/// A value transformer returned by the model's +JSONTransformerForKey: method
+/// is given precedence over the one returned by this method.
+///
+/// The default implementation invokes `+JSONTransformer` on the
+/// receiver if it's implemented. It supports NSURL conversion through
+/// +NSURLJSONTransformer.
+///
+/// class - The class of the property to serialize. This property must not be
+/// nil.
+///
+/// Returns a value transformer or nil if no transformation should be used.
++ (NSValueTransformer *)transformerForModelPropertiesOfClass:(Class)class;
+
+/// A value transformer that should be used for a properties of the given
+/// primitive type.
+///
+/// If `objCType` matches @encode(id), the value transformer returned by
+/// +transformerForModelPropertiesOfClass: is used instead.
+///
+/// The default implementation transforms properties that match @encode(BOOL)
+/// using the MTLBooleanValueTransformerName transformer.
+///
+/// objCType - The type encoding for the value of this property. This is the type
+/// as it would be returned by the @encode() directive.
+///
+/// Returns a value transformer or nil if no transformation should be used.
++ (NSValueTransformer *)transformerForModelPropertiesOfObjCType:(const char *)objCType;
@end
+@interface MTLJSONAdapter (ValueTransformers)
+
+/// Creates a reversible transformer to convert a JSON dictionary into a MTLModel
+/// object, and vice-versa.
+///
+/// modelClass - The MTLModel subclass to attempt to parse from the JSON. This
+/// class must conform to . This argument must
+/// not be nil.
+///
+/// Returns a reversible transformer which uses the class of the receiver for
+/// transforming values back and forth.
++ (NSValueTransformer *)dictionaryTransformerWithModelClass:(Class)modelClass;
+
+/// Creates a reversible transformer to convert an array of JSON dictionaries
+/// into an array of MTLModel objects, and vice-versa.
+///
+/// modelClass - The MTLModel subclass to attempt to parse from each JSON
+/// dictionary. This class must conform to .
+/// This argument must not be nil.
+///
+/// Returns a reversible transformer which uses the class of the receiver for
+/// transforming array elements back and forth.
++ (NSValueTransformer *)arrayTransformerWithModelClass:(Class)modelClass;
+
+/// This value transformer is used by MTLJSONAdapter to automatically convert
+/// NSURL properties to JSON strings and vice versa.
++ (NSValueTransformer *)NSURLJSONTransformer;
+
+@end
+
+@class MTLModel;
+
@interface MTLJSONAdapter (Deprecated)
-+ (id)modelOfClass:(Class)modelClass fromJSONDictionary:(NSDictionary *)JSONDictionary __attribute__((deprecated("Replaced by +modelOfClass:fromJSONDictionary:error:")));
-- (id)initWithJSONDictionary:(NSDictionary *)JSONDictionary modelClass:(Class)modelClass __attribute__((deprecated("Replaced by -initWithJSONDictionary:modelClass:error:")));
+@property (nonatomic, strong, readonly) id model __attribute__((unavailable("Replaced by -modelFromJSONDictionary:error:")));
+
++ (NSArray *)JSONArrayFromModels:(NSArray *)models __attribute__((deprecated("Replaced by +JSONArrayFromModels:error:")));
+
++ (NSDictionary *)JSONDictionaryFromModel:(MTLModel *)model __attribute__((deprecated("Replaced by +JSONDictionaryFromModel:error:")));
+
+- (NSDictionary *)JSONDictionary __attribute__((unavailable("Replaced by -JSONDictionaryFromModel:error:")));
+- (NSString *)JSONKeyPathForPropertyKey:(NSString *)key __attribute__((unavailable("Replaced by -serializablePropertyKeys:forModel:")));
+- (id)initWithJSONDictionary:(NSDictionary *)JSONDictionary modelClass:(Class)modelClass error:(NSError **)error __attribute__((unavailable("Replaced by -initWithModelClass:")));
+- (id)initWithModel:(id)model __attribute__((unavailable("Replaced by -initWithModelClass:")));
+- (NSDictionary *)serializeToJSONDictionary:(NSError **)error __attribute__((unavailable("Replaced by -JSONDictionaryFromModel:error:")));
@end
diff --git a/iOSStudy/Pods/Mantle/Mantle/MTLJSONAdapter.m b/iOSStudy/Pods/Mantle/Mantle/MTLJSONAdapter.m
index 9872921..71e7ef0 100644
--- a/iOSStudy/Pods/Mantle/Mantle/MTLJSONAdapter.m
+++ b/iOSStudy/Pods/Mantle/Mantle/MTLJSONAdapter.m
@@ -6,9 +6,18 @@
// Copyright (c) 2013 GitHub. All rights reserved.
//
+#import
+
+#import "NSDictionary+MTLJSONKeyPath.h"
+
+#import "EXTRuntimeExtensions.h"
+#import "EXTScope.h"
#import "MTLJSONAdapter.h"
#import "MTLModel.h"
+#import "MTLTransformerErrorHandling.h"
#import "MTLReflection.h"
+#import "NSValueTransformer+MTLPredefinedTransformerAdditions.h"
+#import "MTLValueTransformer.h"
NSString * const MTLJSONAdapterErrorDomain = @"MTLJSONAdapterErrorDomain";
const NSInteger MTLJSONAdapterErrorNoClassFound = 2;
@@ -30,12 +39,33 @@ @interface MTLJSONAdapter ()
// A cached copy of the return value of +JSONKeyPathsByPropertyKey.
@property (nonatomic, copy, readonly) NSDictionary *JSONKeyPathsByPropertyKey;
-// Looks up the NSValueTransformer that should be used for the given key.
+// A cached copy of the return value of -valueTransformersForModelClass:
+@property (nonatomic, copy, readonly) NSDictionary *valueTransformersByPropertyKey;
+
+// Used to cache the JSON adapters returned by -JSONAdapterForModelClass:error:.
+@property (nonatomic, strong, readonly) NSMapTable *JSONAdaptersByModelClass;
+
+// If +classForParsingJSONDictionary: returns a model class different from the
+// one this adapter was initialized with, use this method to obtain a cached
+// instance of a suitable adapter instead.
//
-// key - The property key to transform from or to. This argument must not be nil.
+// modelClass - The class from which to parse the JSON. This class must conform
+// to . This argument must not be nil.
+// error - If not NULL, this may be set to an error that occurs during
+// initializing the adapter.
//
-// Returns a transformer to use, or nil to not transform the property.
-- (NSValueTransformer *)JSONTransformerForKey:(NSString *)key;
+// Returns a JSON adapter for modelClass, creating one of necessary. If no
+// adapter could be created, nil is returned.
+- (MTLJSONAdapter *)JSONAdapterForModelClass:(Class)modelClass error:(NSError **)error;
+
+// Collect all value transformers needed for a given class.
+//
+// modelClass - The class from which to parse the JSON. This class must conform
+// to . This argument must not be nil.
+//
+// Returns a dictionary with the properties of modelClass that need
+// transformation as keys and the value transformers as values.
++ (NSDictionary *)valueTransformersForModelClass:(Class)modelClass;
@end
@@ -44,8 +74,9 @@ @implementation MTLJSONAdapter
#pragma mark Convenience methods
+ (id)modelOfClass:(Class)modelClass fromJSONDictionary:(NSDictionary *)JSONDictionary error:(NSError **)error {
- MTLJSONAdapter *adapter = [[self alloc] initWithJSONDictionary:JSONDictionary modelClass:modelClass error:error];
- return adapter.model;
+ MTLJSONAdapter *adapter = [[self alloc] initWithModelClass:modelClass];
+
+ return [adapter modelFromJSONDictionary:JSONDictionary error:error];
}
+ (NSArray *)modelsOfClass:(Class)modelClass fromJSONArray:(NSArray *)JSONArray error:(NSError **)error {
@@ -65,25 +96,26 @@ + (NSArray *)modelsOfClass:(Class)modelClass fromJSONArray:(NSArray *)JSONArray
MTLModel *model = [self modelOfClass:modelClass fromJSONDictionary:JSONDictionary error:error];
if (model == nil) return nil;
-
+
[models addObject:model];
}
-
+
return models;
}
-+ (NSDictionary *)JSONDictionaryFromModel:(MTLModel *)model {
- MTLJSONAdapter *adapter = [[self alloc] initWithModel:model];
- return adapter.JSONDictionary;
++ (NSDictionary *)JSONDictionaryFromModel:(id)model error:(NSError **)error {
+ MTLJSONAdapter *adapter = [[self alloc] initWithModelClass:model.class];
+
+ return [adapter JSONDictionaryFromModel:model error:error];
}
-+ (NSArray *)JSONArrayFromModels:(NSArray *)models {
++ (NSArray *)JSONArrayFromModels:(NSArray *)models error:(NSError **)error {
NSParameterAssert(models != nil);
NSParameterAssert([models isKindOfClass:NSArray.class]);
NSMutableArray *JSONArray = [NSMutableArray arrayWithCapacity:models.count];
for (MTLModel *model in models) {
- NSDictionary *JSONDictionary = [self JSONDictionaryFromModel:model];
+ NSDictionary *JSONDictionary = [self JSONDictionaryFromModel:model error:error];
if (JSONDictionary == nil) return nil;
[JSONArray addObject:JSONDictionary];
@@ -95,29 +127,139 @@ + (NSArray *)JSONArrayFromModels:(NSArray *)models {
#pragma mark Lifecycle
- (id)init {
- NSAssert(NO, @"%@ must be initialized with a JSON dictionary or model object", self.class);
+ NSAssert(NO, @"%@ must be initialized with a model class", self.class);
return nil;
}
-- (id)initWithJSONDictionary:(NSDictionary *)JSONDictionary modelClass:(Class)modelClass error:(NSError **)error {
+- (id)initWithModelClass:(Class)modelClass {
NSParameterAssert(modelClass != nil);
- NSParameterAssert([modelClass isSubclassOfClass:MTLModel.class]);
NSParameterAssert([modelClass conformsToProtocol:@protocol(MTLJSONSerializing)]);
- if (JSONDictionary == nil || ![JSONDictionary isKindOfClass:NSDictionary.class]) {
- if (error != NULL) {
- NSDictionary *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"Missing JSON dictionary", @""),
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"%@ could not be created because an invalid JSON dictionary was provided: %@", @""), NSStringFromClass(modelClass), JSONDictionary.class],
- };
- *error = [NSError errorWithDomain:MTLJSONAdapterErrorDomain code:MTLJSONAdapterErrorInvalidJSONDictionary userInfo:userInfo];
+ self = [super init];
+ if (self == nil) return nil;
+
+ _modelClass = modelClass;
+
+ _JSONKeyPathsByPropertyKey = [modelClass JSONKeyPathsByPropertyKey];
+
+ NSSet *propertyKeys = [self.modelClass propertyKeys];
+
+ for (NSString *mappedPropertyKey in _JSONKeyPathsByPropertyKey) {
+ if (![propertyKeys containsObject:mappedPropertyKey]) {
+ NSAssert(NO, @"%@ is not a property of %@.", mappedPropertyKey, modelClass);
+ return nil;
+ }
+
+ id value = _JSONKeyPathsByPropertyKey[mappedPropertyKey];
+
+ if ([value isKindOfClass:NSArray.class]) {
+ for (NSString *keyPath in value) {
+ if ([keyPath isKindOfClass:NSString.class]) continue;
+
+ NSAssert(NO, @"%@ must either map to a JSON key path or a JSON array of key paths, got: %@.", mappedPropertyKey, value);
+ return nil;
+ }
+ } else if (![value isKindOfClass:NSString.class]) {
+ NSAssert(NO, @"%@ must either map to a JSON key path or a JSON array of key paths, got: %@.",mappedPropertyKey, value);
+ return nil;
}
+ }
+
+ _valueTransformersByPropertyKey = [self.class valueTransformersForModelClass:modelClass];
+
+ _JSONAdaptersByModelClass = [NSMapTable strongToStrongObjectsMapTable];
+
+ return self;
+}
+
+#pragma mark Serialization
+
+- (NSDictionary *)JSONDictionaryFromModel:(id)model error:(NSError **)error {
+ NSParameterAssert(model != nil);
+ NSParameterAssert([model isKindOfClass:self.modelClass]);
+
+ if (self.modelClass != model.class) {
+ MTLJSONAdapter *otherAdapter = [self JSONAdapterForModelClass:model.class error:error];
+
+ return [otherAdapter JSONDictionaryFromModel:model error:error];
+ }
+
+ NSSet *propertyKeysToSerialize = [self serializablePropertyKeys:[NSSet setWithArray:self.JSONKeyPathsByPropertyKey.allKeys] forModel:model];
+
+ NSDictionary *dictionaryValue = [model.dictionaryValue dictionaryWithValuesForKeys:propertyKeysToSerialize.allObjects];
+ NSMutableDictionary *JSONDictionary = [[NSMutableDictionary alloc] initWithCapacity:dictionaryValue.count];
+
+ __block BOOL success = YES;
+ __block NSError *tmpError = nil;
+
+ [dictionaryValue enumerateKeysAndObjectsUsingBlock:^(NSString *propertyKey, id value, BOOL *stop) {
+ id JSONKeyPaths = self.JSONKeyPathsByPropertyKey[propertyKey];
+
+ if (JSONKeyPaths == nil) return;
+
+ NSValueTransformer *transformer = self.valueTransformersByPropertyKey[propertyKey];
+ if ([transformer.class allowsReverseTransformation]) {
+ // Map NSNull -> nil for the transformer, and then back for the
+ // dictionaryValue we're going to insert into.
+ if ([value isEqual:NSNull.null]) value = nil;
+
+ if ([transformer respondsToSelector:@selector(reverseTransformedValue:success:error:)]) {
+ id errorHandlingTransformer = (id)transformer;
+
+ value = [errorHandlingTransformer reverseTransformedValue:value success:&success error:&tmpError];
+
+ if (!success) {
+ *stop = YES;
+ return;
+ }
+ } else {
+ value = [transformer reverseTransformedValue:value] ?: NSNull.null;
+ }
+ }
+
+ void (^createComponents)(id, NSString *) = ^(id obj, NSString *keyPath) {
+ NSArray *keyPathComponents = [keyPath componentsSeparatedByString:@"."];
+
+ // Set up dictionaries at each step of the key path.
+ for (NSString *component in keyPathComponents) {
+ if ([obj valueForKey:component] == nil) {
+ // Insert an empty mutable dictionary at this spot so that we
+ // can set the whole key path afterward.
+ [obj setValue:[NSMutableDictionary dictionary] forKey:component];
+ }
+
+ obj = [obj valueForKey:component];
+ }
+ };
+
+ if ([JSONKeyPaths isKindOfClass:NSString.class]) {
+ createComponents(JSONDictionary, JSONKeyPaths);
+
+ [JSONDictionary setValue:value forKeyPath:JSONKeyPaths];
+ }
+
+ if ([JSONKeyPaths isKindOfClass:NSArray.class]) {
+ for (NSString *JSONKeyPath in JSONKeyPaths) {
+ createComponents(JSONDictionary, JSONKeyPath);
+
+ [JSONDictionary setValue:value[JSONKeyPath] forKeyPath:JSONKeyPath];
+ }
+ }
+ }];
+
+ if (success) {
+ return JSONDictionary;
+ } else {
+ if (error != NULL) *error = tmpError;
+
return nil;
}
+}
- if ([modelClass respondsToSelector:@selector(classForParsingJSONDictionary:)]) {
- modelClass = [modelClass classForParsingJSONDictionary:JSONDictionary];
- if (modelClass == nil) {
+- (id)modelFromJSONDictionary:(NSDictionary *)JSONDictionary error:(NSError **)error {
+ if ([self.modelClass respondsToSelector:@selector(classForParsingJSONDictionary:)]) {
+ Class class = [self.modelClass classForParsingJSONDictionary:JSONDictionary];
+ if (class == nil) {
if (error != NULL) {
NSDictionary *userInfo = @{
NSLocalizedDescriptionKey: NSLocalizedString(@"Could not parse JSON", @""),
@@ -130,69 +272,70 @@ - (id)initWithJSONDictionary:(NSDictionary *)JSONDictionary modelClass:(Class)mo
return nil;
}
- NSAssert([modelClass isSubclassOfClass:MTLModel.class], @"Class %@ returned from +classForParsingJSONDictionary: is not a subclass of MTLModel", modelClass);
- NSAssert([modelClass conformsToProtocol:@protocol(MTLJSONSerializing)], @"Class %@ returned from +classForParsingJSONDictionary: does not conform to ", modelClass);
- }
+ if (class != self.modelClass) {
+ NSAssert([class conformsToProtocol:@protocol(MTLJSONSerializing)], @"Class %@ returned from +classForParsingJSONDictionary: does not conform to ", class);
- self = [super init];
- if (self == nil) return nil;
+ MTLJSONAdapter *otherAdapter = [self JSONAdapterForModelClass:class error:error];
- _modelClass = modelClass;
- _JSONKeyPathsByPropertyKey = [[modelClass JSONKeyPathsByPropertyKey] copy];
+ return [otherAdapter modelFromJSONDictionary:JSONDictionary error:error];
+ }
+ }
NSMutableDictionary *dictionaryValue = [[NSMutableDictionary alloc] initWithCapacity:JSONDictionary.count];
- NSSet *propertyKeys = [self.modelClass propertyKeys];
+ for (NSString *propertyKey in [self.modelClass propertyKeys]) {
+ id JSONKeyPaths = self.JSONKeyPathsByPropertyKey[propertyKey];
- for (NSString *mappedPropertyKey in self.JSONKeyPathsByPropertyKey) {
- if (![propertyKeys containsObject:mappedPropertyKey]) {
- NSAssert(NO, @"%@ is not a property of %@.", mappedPropertyKey, modelClass);
- return nil;
- }
+ if (JSONKeyPaths == nil) continue;
- id value = self.JSONKeyPathsByPropertyKey[mappedPropertyKey];
+ id value;
- if (![value isKindOfClass:NSString.class] && value != NSNull.null) {
- NSAssert(NO, @"%@ must either map to a JSON key path or NSNull, got: %@.",mappedPropertyKey, value);
- return nil;
- }
- }
+ if ([JSONKeyPaths isKindOfClass:NSArray.class]) {
+ NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
- for (NSString *propertyKey in propertyKeys) {
- NSString *JSONKeyPath = [self JSONKeyPathForPropertyKey:propertyKey];
- if (JSONKeyPath == nil) continue;
+ for (NSString *keyPath in JSONKeyPaths) {
+ BOOL success;
+ id value = [JSONDictionary mtl_valueForJSONKeyPath:keyPath success:&success error:error];
- id value;
- @try {
- value = [JSONDictionary valueForKeyPath:JSONKeyPath];
- } @catch (NSException *ex) {
- if (error != NULL) {
- NSDictionary *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"Invalid JSON dictionary", nil),
- NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"%1$@ could not be parsed because an invalid JSON dictionary was provided for key path \"%2$@\"", nil), modelClass, JSONKeyPath],
- MTLJSONAdapterThrownExceptionErrorKey: ex
- };
+ if (!success) return nil;
- *error = [NSError errorWithDomain:MTLJSONAdapterErrorDomain code:MTLJSONAdapterErrorInvalidJSONDictionary userInfo:userInfo];
+ if (value != nil) dictionary[keyPath] = value;
}
- return nil;
+ value = dictionary;
+ } else {
+ BOOL success;
+ value = [JSONDictionary mtl_valueForJSONKeyPath:JSONKeyPaths success:&success error:error];
+
+ if (!success) return nil;
}
if (value == nil) continue;
@try {
- NSValueTransformer *transformer = [self JSONTransformerForKey:propertyKey];
+ NSValueTransformer *transformer = self.valueTransformersByPropertyKey[propertyKey];
if (transformer != nil) {
// Map NSNull -> nil for the transformer, and then back for the
// dictionary we're going to insert into.
if ([value isEqual:NSNull.null]) value = nil;
- value = [transformer transformedValue:value] ?: NSNull.null;
+
+ if ([transformer respondsToSelector:@selector(transformedValue:success:error:)]) {
+ id errorHandlingTransformer = (id)transformer;
+
+ BOOL success = YES;
+ value = [errorHandlingTransformer transformedValue:value success:&success error:error];
+
+ if (!success) return nil;
+ } else {
+ value = [transformer transformedValue:value];
+ }
+
+ if (value == nil) value = NSNull.null;
}
dictionaryValue[propertyKey] = value;
} @catch (NSException *ex) {
- NSLog(@"*** Caught exception %@ parsing JSON key path \"%@\" from: %@", ex, JSONKeyPath, JSONDictionary);
+ NSLog(@"*** Caught exception %@ parsing JSON key path \"%@\" from: %@", ex, JSONKeyPaths, JSONDictionary);
// Fail fast in Debug builds.
#if DEBUG
@@ -213,96 +356,284 @@ - (id)initWithJSONDictionary:(NSDictionary *)JSONDictionary modelClass:(Class)mo
}
}
- _model = [self.modelClass modelWithDictionary:dictionaryValue error:error];
- if (_model == nil) return nil;
+ id model = [self.modelClass modelWithDictionary:dictionaryValue error:error];
- return self;
+ return [model validate:error] ? model : nil;
}
-- (id)initWithModel:(MTLModel *)model {
- NSParameterAssert(model != nil);
++ (NSDictionary *)valueTransformersForModelClass:(Class)modelClass {
+ NSParameterAssert(modelClass != nil);
+ NSParameterAssert([modelClass conformsToProtocol:@protocol(MTLJSONSerializing)]);
- self = [super init];
- if (self == nil) return nil;
+ NSMutableDictionary *result = [NSMutableDictionary dictionary];
- _model = model;
- _modelClass = model.class;
- _JSONKeyPathsByPropertyKey = [[model.class JSONKeyPathsByPropertyKey] copy];
+ for (NSString *key in [modelClass propertyKeys]) {
+ SEL selector = MTLSelectorWithKeyPattern(key, "JSONTransformer");
+ if ([modelClass respondsToSelector:selector]) {
+ NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[modelClass methodSignatureForSelector:selector]];
+ invocation.target = modelClass;
+ invocation.selector = selector;
+ [invocation invoke];
- return self;
-}
+ __unsafe_unretained id transformer = nil;
+ [invocation getReturnValue:&transformer];
-#pragma mark Serialization
+ if (transformer != nil) result[key] = transformer;
-- (NSDictionary *)JSONDictionary {
- NSDictionary *dictionaryValue = self.model.dictionaryValue;
- NSMutableDictionary *JSONDictionary = [[NSMutableDictionary alloc] initWithCapacity:dictionaryValue.count];
+ continue;
+ }
- [dictionaryValue enumerateKeysAndObjectsUsingBlock:^(NSString *propertyKey, id value, BOOL *stop) {
- NSString *JSONKeyPath = [self JSONKeyPathForPropertyKey:propertyKey];
- if (JSONKeyPath == nil) return;
+ if ([modelClass respondsToSelector:@selector(JSONTransformerForKey:)]) {
+ NSValueTransformer *transformer = [modelClass JSONTransformerForKey:key];
- NSValueTransformer *transformer = [self JSONTransformerForKey:propertyKey];
- if ([transformer.class allowsReverseTransformation]) {
- // Map NSNull -> nil for the transformer, and then back for the
- // dictionaryValue we're going to insert into.
- if ([value isEqual:NSNull.null]) value = nil;
- value = [transformer reverseTransformedValue:value] ?: NSNull.null;
+ if (transformer != nil) result[key] = transformer;
+
+ continue;
}
- NSArray *keyPathComponents = [JSONKeyPath componentsSeparatedByString:@"."];
+ objc_property_t property = class_getProperty(modelClass, key.UTF8String);
+
+ if (property == NULL) continue;
+
+ mtl_propertyAttributes *attributes = mtl_copyPropertyAttributes(property);
+ @onExit {
+ free(attributes);
+ };
+
+ NSValueTransformer *transformer = nil;
+
+ if (*(attributes->type) == *(@encode(id))) {
+ Class propertyClass = attributes->objectClass;
- // Set up dictionaries at each step of the key path.
- id obj = JSONDictionary;
- for (NSString *component in keyPathComponents) {
- if ([obj valueForKey:component] == nil) {
- // Insert an empty mutable dictionary at this spot so that we
- // can set the whole key path afterward.
- [obj setValue:[NSMutableDictionary dictionary] forKey:component];
+ if (propertyClass != nil) {
+ transformer = [self transformerForModelPropertiesOfClass:propertyClass];
}
- obj = [obj valueForKey:component];
+ if (transformer == nil) transformer = [NSValueTransformer mtl_validatingTransformerForClass:NSObject.class];
+ } else {
+ transformer = [self transformerForModelPropertiesOfObjCType:attributes->type] ?: [NSValueTransformer mtl_validatingTransformerForClass:NSValue.class];
}
- [JSONDictionary setValue:value forKeyPath:JSONKeyPath];
- }];
+ if (transformer != nil) result[key] = transformer;
+ }
- return JSONDictionary;
+ return result;
}
-- (NSValueTransformer *)JSONTransformerForKey:(NSString *)key {
- NSParameterAssert(key != nil);
+- (MTLJSONAdapter *)JSONAdapterForModelClass:(Class)modelClass error:(NSError **)error {
+ NSParameterAssert(modelClass != nil);
+ NSParameterAssert([modelClass conformsToProtocol:@protocol(MTLJSONSerializing)]);
+
+ @synchronized(self) {
+ MTLJSONAdapter *result = [self.JSONAdaptersByModelClass objectForKey:modelClass];
+
+ if (result != nil) return result;
- SEL selector = MTLSelectorWithKeyPattern(key, "JSONTransformer");
- if ([self.modelClass respondsToSelector:selector]) {
- NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[self.modelClass methodSignatureForSelector:selector]];
- invocation.target = self.modelClass;
- invocation.selector = selector;
- [invocation invoke];
+ result = [[MTLJSONAdapter alloc] initWithModelClass:modelClass];
+
+ if (result != nil) {
+ [self.JSONAdaptersByModelClass setObject:result forKey:modelClass];
+ }
- __unsafe_unretained id result = nil;
- [invocation getReturnValue:&result];
return result;
}
+}
+
+- (NSSet *)serializablePropertyKeys:(NSSet *)propertyKeys forModel:(id)model {
+ return propertyKeys;
+}
- if ([self.modelClass respondsToSelector:@selector(JSONTransformerForKey:)]) {
- return [self.modelClass JSONTransformerForKey:key];
++ (NSValueTransformer *)transformerForModelPropertiesOfClass:(Class)modelClass {
+ NSParameterAssert(modelClass != nil);
+
+ SEL selector = MTLSelectorWithKeyPattern(NSStringFromClass(modelClass), "JSONTransformer");
+ if (![self respondsToSelector:selector]) return nil;
+
+ NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:selector]];
+ invocation.target = self;
+ invocation.selector = selector;
+ [invocation invoke];
+
+ __unsafe_unretained id result = nil;
+ [invocation getReturnValue:&result];
+ return result;
+}
+
++ (NSValueTransformer *)transformerForModelPropertiesOfObjCType:(const char *)objCType {
+ NSParameterAssert(objCType != NULL);
+
+ if (strcmp(objCType, @encode(BOOL)) == 0) {
+ return [NSValueTransformer valueTransformerForName:MTLBooleanValueTransformerName];
}
return nil;
}
-- (NSString *)JSONKeyPathForPropertyKey:(NSString *)key {
- NSParameterAssert(key != nil);
+@end
- id JSONKeyPath = self.JSONKeyPathsByPropertyKey[key];
- if ([JSONKeyPath isEqual:NSNull.null]) return nil;
+@implementation MTLJSONAdapter (ValueTransformers)
- if (JSONKeyPath == nil) {
- return key;
- } else {
- return JSONKeyPath;
- }
++ (NSValueTransformer *)dictionaryTransformerWithModelClass:(Class)modelClass {
+ NSParameterAssert([modelClass isSubclassOfClass:MTLModel.class]);
+ NSParameterAssert([modelClass conformsToProtocol:@protocol(MTLJSONSerializing)]);
+
+ return [MTLValueTransformer
+ transformerUsingForwardBlock:^ id (id JSONDictionary, BOOL *success, NSError **error) {
+ if (JSONDictionary == nil) return nil;
+
+ if (![JSONDictionary isKindOfClass:NSDictionary.class]) {
+ if (error != NULL) {
+ NSDictionary *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Could not convert JSON dictionary to model object", @""),
+ NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"Expected an NSDictionary, got: %@", @""), JSONDictionary],
+ MTLTransformerErrorHandlingInputValueErrorKey : JSONDictionary
+ };
+
+ *error = [NSError errorWithDomain:MTLTransformerErrorHandlingErrorDomain code:MTLTransformerErrorHandlingErrorInvalidInput userInfo:userInfo];
+ }
+ *success = NO;
+ return nil;
+ }
+
+ id model = [self modelOfClass:modelClass fromJSONDictionary:JSONDictionary error:error];
+ if (model == nil) {
+ *success = NO;
+ }
+
+ return model;
+ }
+ reverseBlock:^ NSDictionary * (id model, BOOL *success, NSError **error) {
+ if (model == nil) return nil;
+
+ if (![model isKindOfClass:MTLModel.class] || ![model conformsToProtocol:@protocol(MTLJSONSerializing)]) {
+ if (error != NULL) {
+ NSDictionary *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Could not convert model object to JSON dictionary", @""),
+ NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"Expected a MTLModel object conforming to , got: %@.", @""), model],
+ MTLTransformerErrorHandlingInputValueErrorKey : model
+ };
+
+ *error = [NSError errorWithDomain:MTLTransformerErrorHandlingErrorDomain code:MTLTransformerErrorHandlingErrorInvalidInput userInfo:userInfo];
+ }
+ *success = NO;
+ return nil;
+ }
+
+ NSDictionary *result = [self JSONDictionaryFromModel:model error:error];
+ if (result == nil) {
+ *success = NO;
+ }
+
+ return result;
+ }];
+}
+
++ (NSValueTransformer *)arrayTransformerWithModelClass:(Class)modelClass {
+ id dictionaryTransformer = [self dictionaryTransformerWithModelClass:modelClass];
+
+ return [MTLValueTransformer
+ transformerUsingForwardBlock:^ id (NSArray *dictionaries, BOOL *success, NSError **error) {
+ if (dictionaries == nil) return nil;
+
+ if (![dictionaries isKindOfClass:NSArray.class]) {
+ if (error != NULL) {
+ NSDictionary *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Could not convert JSON array to model array", @""),
+ NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"Expected an NSArray, got: %@.", @""), dictionaries],
+ MTLTransformerErrorHandlingInputValueErrorKey : dictionaries
+ };
+
+ *error = [NSError errorWithDomain:MTLTransformerErrorHandlingErrorDomain code:MTLTransformerErrorHandlingErrorInvalidInput userInfo:userInfo];
+ }
+ *success = NO;
+ return nil;
+ }
+
+ NSMutableArray *models = [NSMutableArray arrayWithCapacity:dictionaries.count];
+ for (id JSONDictionary in dictionaries) {
+ if (JSONDictionary == NSNull.null) {
+ [models addObject:NSNull.null];
+ continue;
+ }
+
+ if (![JSONDictionary isKindOfClass:NSDictionary.class]) {
+ if (error != NULL) {
+ NSDictionary *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Could not convert JSON array to model array", @""),
+ NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"Expected an NSDictionary or an NSNull, got: %@.", @""), JSONDictionary],
+ MTLTransformerErrorHandlingInputValueErrorKey : JSONDictionary
+ };
+
+ *error = [NSError errorWithDomain:MTLTransformerErrorHandlingErrorDomain code:MTLTransformerErrorHandlingErrorInvalidInput userInfo:userInfo];
+ }
+ *success = NO;
+ return nil;
+ }
+
+ id model = [dictionaryTransformer transformedValue:JSONDictionary success:success error:error];
+
+ if (*success == NO) return nil;
+
+ if (model == nil) continue;
+
+ [models addObject:model];
+ }
+
+ return models;
+ }
+ reverseBlock:^ id (NSArray *models, BOOL *success, NSError **error) {
+ if (models == nil) return nil;
+
+ if (![models isKindOfClass:NSArray.class]) {
+ if (error != NULL) {
+ NSDictionary *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Could not convert model array to JSON array", @""),
+ NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"Expected an NSArray, got: %@.", @""), models],
+ MTLTransformerErrorHandlingInputValueErrorKey : models
+ };
+
+ *error = [NSError errorWithDomain:MTLTransformerErrorHandlingErrorDomain code:MTLTransformerErrorHandlingErrorInvalidInput userInfo:userInfo];
+ }
+ *success = NO;
+ return nil;
+ }
+
+ NSMutableArray *dictionaries = [NSMutableArray arrayWithCapacity:models.count];
+ for (id model in models) {
+ if (model == NSNull.null) {
+ [dictionaries addObject:NSNull.null];
+ continue;
+ }
+
+ if (![model isKindOfClass:MTLModel.class]) {
+ if (error != NULL) {
+ NSDictionary *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Could not convert JSON array to model array", @""),
+ NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"Expected a MTLModel or an NSNull, got: %@.", @""), model],
+ MTLTransformerErrorHandlingInputValueErrorKey : model
+ };
+
+ *error = [NSError errorWithDomain:MTLTransformerErrorHandlingErrorDomain code:MTLTransformerErrorHandlingErrorInvalidInput userInfo:userInfo];
+ }
+ *success = NO;
+ return nil;
+ }
+
+ NSDictionary *dict = [dictionaryTransformer reverseTransformedValue:model success:success error:error];
+
+ if (*success == NO) return nil;
+
+ if (dict == nil) continue;
+
+ [dictionaries addObject:dict];
+ }
+
+ return dictionaries;
+ }];
+}
+
++ (NSValueTransformer *)NSURLJSONTransformer {
+ return [NSValueTransformer valueTransformerForName:MTLURLValueTransformerName];
}
@end
@@ -312,12 +643,12 @@ @implementation MTLJSONAdapter (Deprecated)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-implementations"
-+ (id)modelOfClass:(Class)modelClass fromJSONDictionary:(NSDictionary *)JSONDictionary {
- return [self modelOfClass:modelClass fromJSONDictionary:JSONDictionary error:NULL];
++ (NSArray *)JSONArrayFromModels:(NSArray *)models {
+ return [self JSONArrayFromModels:models error:NULL];
}
-- (id)initWithJSONDictionary:(NSDictionary *)JSONDictionary modelClass:(Class)modelClass {
- return [self initWithJSONDictionary:JSONDictionary modelClass:modelClass error:NULL];
++ (NSDictionary *)JSONDictionaryFromModel:(MTLModel *)model {
+ return [self JSONDictionaryFromModel:model error:NULL];
}
#pragma clang diagnostic pop
diff --git a/iOSStudy/Pods/Mantle/Mantle/MTLModel+NSCoding.h b/iOSStudy/Pods/Mantle/Mantle/MTLModel+NSCoding.h
index 94b8f7b..86e140a 100644
--- a/iOSStudy/Pods/Mantle/Mantle/MTLModel+NSCoding.h
+++ b/iOSStudy/Pods/Mantle/Mantle/MTLModel+NSCoding.h
@@ -8,121 +8,121 @@
#import "MTLModel.h"
-// Defines how a MTLModel property key should be encoded into an archive.
-//
-// MTLModelEncodingBehaviorExcluded - The property should never be encoded.
-// MTLModelEncodingBehaviorUnconditional - The property should always be
-// encoded.
-// MTLModelEncodingBehaviorConditional - The object should be encoded only
-// if unconditionally encoded elsewhere.
-// This should only be used for object
-// properties.
+/// Defines how a MTLModel property key should be encoded into an archive.
+///
+/// MTLModelEncodingBehaviorExcluded - The property should never be encoded.
+/// MTLModelEncodingBehaviorUnconditional - The property should always be
+/// encoded.
+/// MTLModelEncodingBehaviorConditional - The object should be encoded only
+/// if unconditionally encoded elsewhere.
+/// This should only be used for object
+/// properties.
typedef enum : NSUInteger {
MTLModelEncodingBehaviorExcluded = 0,
MTLModelEncodingBehaviorUnconditional,
MTLModelEncodingBehaviorConditional,
} MTLModelEncodingBehavior;
-// Implements default archiving and unarchiving behaviors for MTLModel.
+/// Implements default archiving and unarchiving behaviors for MTLModel.
@interface MTLModel (NSCoding)
-// Initializes the receiver from an archive.
-//
-// This will decode the original +modelVersion of the archived object, then
-// invoke -decodeValueForKey:withCoder:modelVersion: for each of the receiver's
-// +propertyKeys.
-//
-// Returns an initialized model object, or nil if a decoding error occurred.
+/// Initializes the receiver from an archive.
+///
+/// This will decode the original +modelVersion of the archived object, then
+/// invoke -decodeValueForKey:withCoder:modelVersion: for each of the receiver's
+/// +propertyKeys.
+///
+/// Returns an initialized model object, or nil if a decoding error occurred.
- (id)initWithCoder:(NSCoder *)coder;
-// Archives the receiver using the given coder.
-//
-// This will encode the receiver's +modelVersion, then the receiver's properties
-// according to the behaviors specified in +encodingBehaviorsByPropertyKey.
+/// Archives the receiver using the given coder.
+///
+/// This will encode the receiver's +modelVersion, then the receiver's properties
+/// according to the behaviors specified in +encodingBehaviorsByPropertyKey.
- (void)encodeWithCoder:(NSCoder *)coder;
-// Determines how the +propertyKeys of the class are encoded into an archive.
-// The values of this dictionary should be boxed MTLModelEncodingBehavior
-// values.
-//
-// Any keys not present in the dictionary will be excluded from the archive.
-//
-// Subclasses overriding this method should combine their values with those of
-// `super`.
-//
-// Returns a dictionary mapping the receiver's +propertyKeys to default encoding
-// behaviors. If a property is an object with `weak` semantics, the default
-// behavior is MTLModelEncodingBehaviorConditional; otherwise, the default is
-// MTLModelEncodingBehaviorUnconditional.
+/// Determines how the +propertyKeys of the class are encoded into an archive.
+/// The values of this dictionary should be boxed MTLModelEncodingBehavior
+/// values.
+///
+/// Any keys not present in the dictionary will be excluded from the archive.
+///
+/// Subclasses overriding this method should combine their values with those of
+/// `super`.
+///
+/// Returns a dictionary mapping the receiver's +propertyKeys to default encoding
+/// behaviors. If a property is an object with `weak` semantics, the default
+/// behavior is MTLModelEncodingBehaviorConditional; otherwise, the default is
+/// MTLModelEncodingBehaviorUnconditional.
+ (NSDictionary *)encodingBehaviorsByPropertyKey;
-// Determines the classes that are allowed to be decoded for each of the
-// receiver's properties when using . The values of this
-// dictionary should be NSArrays of Class objects.
-//
-// If any encodable keys (as determined by +encodingBehaviorsByPropertyKey) are
-// not present in the dictionary, an exception will be thrown during secure
-// encoding or decoding.
-//
-// Subclasses overriding this method should combine their values with those of
-// `super`.
-//
-// Returns a dictionary mapping the receiver's encodable keys (as determined by
-// +encodingBehaviorsByPropertyKey) to default allowed classes, based on the
-// type that each property is declared as. If type of an encodable property
-// cannot be determined (e.g., it is declared as `id`), it will be omitted from
-// the dictionary, and subclasses must provide a valid value to prevent an
-// exception being thrown during encoding/decoding.
+/// Determines the classes that are allowed to be decoded for each of the
+/// receiver's properties when using . The values of this
+/// dictionary should be NSArrays of Class objects.
+///
+/// If any encodable keys (as determined by +encodingBehaviorsByPropertyKey) are
+/// not present in the dictionary, an exception will be thrown during secure
+/// encoding or decoding.
+///
+/// Subclasses overriding this method should combine their values with those of
+/// `super`.
+///
+/// Returns a dictionary mapping the receiver's encodable keys (as determined by
+/// +encodingBehaviorsByPropertyKey) to default allowed classes, based on the
+/// type that each property is declared as. If type of an encodable property
+/// cannot be determined (e.g., it is declared as `id`), it will be omitted from
+/// the dictionary, and subclasses must provide a valid value to prevent an
+/// exception being thrown during encoding/decoding.
+ (NSDictionary *)allowedSecureCodingClassesByPropertyKey;
-// Decodes the value of the given property key from an archive.
-//
-// By default, this method looks for a `-decodeWithCoder:modelVersion:`
-// method on the receiver, and invokes it if found.
-//
-// If the custom method is not implemented and `coder` does not require secure
-// coding, `-[NSCoder decodeObjectForKey:]` will be invoked with the given
-// `key`.
-//
-// If the custom method is not implemented and `coder` requires secure coding,
-// `-[NSCoder decodeObjectOfClasses:forKey:]` will be invoked with the
-// information from +allowedSecureCodingClassesByPropertyKey and the given `key`. The
-// receiver must conform to for this to work correctly.
-//
-// key - The property key to decode the value for. This argument cannot
-// be nil.
-// coder - The NSCoder representing the archive being decoded. This
-// argument cannot be nil.
-// modelVersion - The version of the original model object that was encoded.
-//
-// Returns the decoded and boxed value, or nil if the key was not present.
+/// Decodes the value of the given property key from an archive.
+///
+/// By default, this method looks for a `-decodeWithCoder:modelVersion:`
+/// method on the receiver, and invokes it if found.
+///
+/// If the custom method is not implemented and `coder` does not require secure
+/// coding, `-[NSCoder decodeObjectForKey:]` will be invoked with the given
+/// `key`.
+///
+/// If the custom method is not implemented and `coder` requires secure coding,
+/// `-[NSCoder decodeObjectOfClasses:forKey:]` will be invoked with the
+/// information from +allowedSecureCodingClassesByPropertyKey and the given `key`. The
+/// receiver must conform to for this to work correctly.
+///
+/// key - The property key to decode the value for. This argument cannot
+/// be nil.
+/// coder - The NSCoder representing the archive being decoded. This
+/// argument cannot be nil.
+/// modelVersion - The version of the original model object that was encoded.
+///
+/// Returns the decoded and boxed value, or nil if the key was not present.
- (id)decodeValueForKey:(NSString *)key withCoder:(NSCoder *)coder modelVersion:(NSUInteger)modelVersion;
-// The version of this MTLModel subclass.
-//
-// This version number is saved in archives so that later model changes can be
-// made backwards-compatible with old versions.
-//
-// Subclasses should override this method to return a higher version number
-// whenever a breaking change is made to the model.
-//
-// Returns 0.
+/// The version of this MTLModel subclass.
+///
+/// This version number is saved in archives so that later model changes can be
+/// made backwards-compatible with old versions.
+///
+/// Subclasses should override this method to return a higher version number
+/// whenever a breaking change is made to the model.
+///
+/// Returns 0.
+ (NSUInteger)modelVersion;
@end
-// This method must be overridden to support archives created by older versions
-// of Mantle (before the `MTLModel+NSCoding` interface existed).
+/// This method must be overridden to support archives created by older versions
+/// of Mantle (before the `MTLModel+NSCoding` interface existed).
@interface MTLModel (OldArchiveSupport)
-// Converts an archived external representation to a dictionary suitable for
-// passing to -initWithDictionary:.
-//
-// externalRepresentation - The decoded external representation of the receiver.
-// fromVersion - The model version at the time the external
-// representation was encoded.
-//
-// Returns nil by default, indicating that conversion failed.
+/// Converts an archived external representation to a dictionary suitable for
+/// passing to -initWithDictionary:.
+///
+/// externalRepresentation - The decoded external representation of the receiver.
+/// fromVersion - The model version at the time the external
+/// representation was encoded.
+///
+/// Returns nil by default, indicating that conversion failed.
+ (NSDictionary *)dictionaryValueFromArchivedExternalRepresentation:(NSDictionary *)externalRepresentation version:(NSUInteger)fromVersion;
@end
diff --git a/iOSStudy/Pods/Mantle/Mantle/MTLModel+NSCoding.m b/iOSStudy/Pods/Mantle/Mantle/MTLModel+NSCoding.m
index 852f5ae..79a3b57 100644
--- a/iOSStudy/Pods/Mantle/Mantle/MTLModel+NSCoding.m
+++ b/iOSStudy/Pods/Mantle/Mantle/MTLModel+NSCoding.m
@@ -10,7 +10,6 @@
#import "EXTRuntimeExtensions.h"
#import "EXTScope.h"
#import "MTLReflection.h"
-#import
// Used in archives to store the modelVersion of the archived instance.
static NSString * const MTLModelVersionKey = @"MTLModelVersion";
diff --git a/iOSStudy/Pods/Mantle/Mantle/MTLModel.h b/iOSStudy/Pods/Mantle/Mantle/MTLModel.h
index 65da40d..96042b4 100644
--- a/iOSStudy/Pods/Mantle/Mantle/MTLModel.h
+++ b/iOSStudy/Pods/Mantle/Mantle/MTLModel.h
@@ -8,118 +8,172 @@
#import
-// An abstract base class for model objects, using reflection to provide
-// sensible default behaviors.
-//
-// The default implementations of , -hash, and -isEqual: make use of
-// the +propertyKeys method.
-@interface MTLModel : NSObject
-
-// Returns a new instance of the receiver initialized using
-// -initWithDictionary:error:.
+/// Defines a property's storage behavior, which affects how it will be copied,
+/// compared, and persisted.
+///
+/// MTLPropertyStorageNone - This property is not included in -description,
+/// -hash, or anything else.
+/// MTLPropertyStorageTransitory - This property is included in one-off
+/// operations like -copy and -dictionaryValue but
+/// does not affect -isEqual: or -hash.
+/// It may disappear at any time.
+/// MTLPropertyStoragePermanent - The property is included in serialization
+/// (like `NSCoding`) and equality, since it can
+/// be expected to stick around.
+typedef enum : NSUInteger {
+ MTLPropertyStorageNone,
+ MTLPropertyStorageTransitory,
+ MTLPropertyStoragePermanent,
+} MTLPropertyStorage;
+
+/// This protocol defines the minimal interface that classes need to implement to
+/// interact with Mantle adapters.
+///
+/// It is intended for scenarios where inheriting from MTLModel is not feasible.
+/// However, clients are encouraged to subclass the MTLModel class if they can.
+///
+/// Clients that wish to implement their own adapters should target classes
+/// conforming to this protocol rather than subclasses of MTLModel to ensure
+/// maximum compatibility.
+@protocol MTLModel
+
+/// Initializes a new instance of the receiver using key-value coding, setting
+/// the keys and values in the given dictionary.
+///
+/// dictionaryValue - Property keys and values to set on the instance. Any NSNull
+/// values will be converted to nil before being used. KVC
+/// validation methods will automatically be invoked for all of
+/// the properties given.
+/// error - If not NULL, this may be set to any error that occurs
+/// (like a KVC validation error).
+///
+/// Returns an initialized model object, or nil if validation failed.
+ (instancetype)modelWithDictionary:(NSDictionary *)dictionaryValue error:(NSError **)error;
-// Initializes the receiver with default values.
-//
-// This is the designated initializer for this class.
-- (instancetype)init;
+/// A dictionary representing the properties of the receiver.
+///
+/// Combines the values corresponding to all +propertyKeys into a dictionary,
+/// with any nil values represented by NSNull.
+///
+/// This property must never be nil.
+@property (nonatomic, copy, readonly) NSDictionary *dictionaryValue;
-// Initializes the receiver using key-value coding, setting the keys and values
-// in the given dictionary.
-//
-// Subclass implementations may override this method, calling the super
-// implementation, in order to perform further processing and initialization
-// after deserialization.
-//
-// dictionaryValue - Property keys and values to set on the receiver. Any NSNull
-// values will be converted to nil before being used. KVC
-// validation methods will automatically be invoked for all of
-// the properties given. If nil, this method is equivalent to
-// -init.
-// error - If not NULL, this may be set to any error that occurs
-// (like a KVC validation error).
-//
-// Returns an initialized model object, or nil if validation failed.
+/// Initializes the receiver using key-value coding, setting the keys and values
+/// in the given dictionary.
+///
+/// Subclass implementations may override this method, calling the super
+/// implementation, in order to perform further processing and initialization
+/// after deserialization.
+///
+/// dictionaryValue - Property keys and values to set on the receiver. Any NSNull
+/// values will be converted to nil before being used. KVC
+/// validation methods will automatically be invoked for all of
+/// the properties given. If nil, this method is equivalent to
+/// -init.
+/// error - If not NULL, this may be set to any error that occurs
+/// (like a KVC validation error).
+///
+/// Returns an initialized model object, or nil if validation failed.
- (instancetype)initWithDictionary:(NSDictionary *)dictionaryValue error:(NSError **)error;
-// Returns the keys for all @property declarations, except for `readonly`
-// properties without ivars, or properties on MTLModel itself.
+/// Merges the value of the given key on the receiver with the value of the same
+/// key from the given model object, giving precedence to the other model object.
+- (void)mergeValueForKey:(NSString *)key fromModel:(id)model;
+
+/// Returns the keys for all @property declarations, except for `readonly`
+/// properties without ivars, or properties on MTLModel itself.
+ (NSSet *)propertyKeys;
-// A dictionary representing the properties of the receiver.
-//
-// The default implementation combines the values corresponding to all
-// +propertyKeys into a dictionary, with any nil values represented by NSNull.
-//
-// This property must never be nil.
-@property (nonatomic, copy, readonly) NSDictionary *dictionaryValue;
+/// Validates the model.
+///
+/// error - If not NULL, this may be set to any error that occurs during
+/// validation
+///
+/// Returns YES if the model is valid, or NO if the validation failed.
+- (BOOL)validate:(NSError **)error;
-// Merges the value of the given key on the receiver with the value of the same
-// key from the given model object, giving precedence to the other model object.
-//
-// By default, this method looks for a `-mergeFromModel:` method on the
-// receiver, and invokes it if found. If not found, and `model` is not nil, the
-// value for the given key is taken from `model`.
-- (void)mergeValueForKey:(NSString *)key fromModel:(MTLModel *)model;
+@end
-// Merges the values of the given model object into the receiver, using
-// -mergeValueForKey:fromModel: for each key in +propertyKeys.
-//
-// `model` must be an instance of the receiver's class or a subclass thereof.
-- (void)mergeValuesForKeysFromModel:(MTLModel *)model;
+/// An abstract base class for model objects, using reflection to provide
+/// sensible default behaviors.
+///
+/// The default implementations of , -hash, and -isEqual: make use of
+/// the +propertyKeys method.
+@interface MTLModel : NSObject
+
+/// Initializes the receiver using key-value coding, setting the keys and values
+/// in the given dictionary.
+///
+/// dictionaryValue - Property keys and values to set on the receiver. Any NSNull
+/// values will be converted to nil before being used. KVC
+/// validation methods will automatically be invoked for all of
+/// the properties given. If nil, this method is equivalent to
+/// -init.
+/// error - If not NULL, this may be set to any error that occurs
+/// (like a KVC validation error).
+///
+/// Returns an initialized model object, or nil if validation failed.
+- (instancetype)initWithDictionary:(NSDictionary *)dictionaryValue error:(NSError **)error;
-// Compares the receiver with another object for equality.
-//
-// The default implementation is equivalent to comparing both models'
-// -dictionaryValue.
-//
-// Note that this may lead to infinite loops if the receiver holds a circular
-// reference to another MTLModel and both use the default behavior.
-// It is recommended to override -isEqual: in this scenario.
+/// Initializes the receiver with default values.
+///
+/// This is the designated initializer for this class.
+- (instancetype)init;
+
+/// By default, this method looks for a `-mergeFromModel:` method on the
+/// receiver, and invokes it if found. If not found, and `model` is not nil, the
+/// value for the given key is taken from `model`.
+- (void)mergeValueForKey:(NSString *)key fromModel:(id)model;
+
+/// Merges the values of the given model object into the receiver, using
+/// -mergeValueForKey:fromModel: for each key in +propertyKeys.
+///
+/// `model` must be an instance of the receiver's class or a subclass thereof.
+- (void)mergeValuesForKeysFromModel:(id)model;
+
+/// The storage behavior of a given key.
+///
+/// The default implementation returns MTLPropertyStorageNone for properties that
+/// are readonly and not backed by an instance variable and
+/// MTLPropertyStoragePermanent otherwise.
+///
+/// Subclasses can use this method to prevent MTLModel from resolving circular
+/// references by returning MTLPropertyStorageTransitory.
+///
+/// Returns the storage behavior for a given key on the receiver.
++ (MTLPropertyStorage)storageBehaviorForPropertyWithKey:(NSString *)propertyKey;
+
+/// Compares the receiver with another object for equality.
+///
+/// The default implementation is equivalent to comparing all properties of both
+/// models for which +storageBehaviorForPropertyWithKey: returns
+/// MTLPropertyStoragePermanent.
+///
+/// Returns YES if the two models are considered equal, NO otherwise.
- (BOOL)isEqual:(id)object;
-// A string that describes the contents of the receiver.
-//
-// The default implementation is based on the receiver's class and its
-// -dictionaryValue.
-//
-// Note that this may lead to infinite loops if the receiver holds a circular
-// reference to another MTLModel and both use the default behavior.
-// It is recommended to override -description in this scenario.
+/// A string that describes the contents of the receiver.
+///
+/// The default implementation is based on the receiver's class and all its
+/// properties for which +storageBehaviorForPropertyWithKey: returns
+/// MTLPropertyStoragePermanent.
- (NSString *)description;
@end
-// Implements validation logic for MTLModel.
+/// Implements validation logic for MTLModel.
@interface MTLModel (Validation)
-// Validates the model.
-//
-// The default implementation simply invokes -validateValue:forKey:error: with
-// all +propertyKeys and their current value. If -validateValue:forKey:error:
-// returns a new value, the property is set to that new value.
-//
-// error - If not NULL, this may be set to any error that occurs during
-// validation
-//
-// Returns YES if the model is valid, or NO if the validation failed.
+/// Validates the model.
+///
+/// The default implementation simply invokes -validateValue:forKey:error: with
+/// all +propertyKeys and their current value. If -validateValue:forKey:error:
+/// returns a new value, the property is set to that new value.
+///
+/// error - If not NULL, this may be set to any error that occurs during
+/// validation
+///
+/// Returns YES if the model is valid, or NO if the validation failed.
- (BOOL)validate:(NSError **)error;
@end
-
-@interface MTLModel (Unavailable)
-
-+ (instancetype)modelWithDictionary:(NSDictionary *)dictionaryValue __attribute__((deprecated("Replaced by +modelWithDictionary:error:")));
-- (instancetype)initWithDictionary:(NSDictionary *)dictionaryValue __attribute__((deprecated("Replaced by -initWithDictionary:error:")));
-
-+ (instancetype)modelWithExternalRepresentation:(NSDictionary *)externalRepresentation __attribute__((deprecated("Replaced by -[MTLJSONAdapter initWithJSONDictionary:modelClass:]")));
-- (instancetype)initWithExternalRepresentation:(NSDictionary *)externalRepresentation __attribute__((deprecated("Replaced by -[MTLJSONAdapter initWithJSONDictionary:modelClass:]")));
-
-@property (nonatomic, copy, readonly) NSDictionary *externalRepresentation __attribute__((deprecated("Replaced by MTLJSONAdapter.JSONDictionary")));
-
-+ (NSDictionary *)externalRepresentationKeyPathsByPropertyKey __attribute__((deprecated("Replaced by +JSONKeyPathsByPropertyKey in ")));
-+ (NSValueTransformer *)transformerForKey:(NSString *)key __attribute__((deprecated("Replaced by +JSONTransformerForKey: in ")));
-
-+ (NSDictionary *)migrateExternalRepresentation:(NSDictionary *)externalRepresentation fromVersion:(NSUInteger)fromVersion __attribute__((deprecated("Replaced by -decodeValueForKey:withCoder:modelVersion:")));
-
-@end
diff --git a/iOSStudy/Pods/Mantle/Mantle/MTLModel.m b/iOSStudy/Pods/Mantle/Mantle/MTLModel.m
index 2ef60fe..5e3f5df 100644
--- a/iOSStudy/Pods/Mantle/Mantle/MTLModel.m
+++ b/iOSStudy/Pods/Mantle/Mantle/MTLModel.m
@@ -13,14 +13,17 @@
#import "MTLReflection.h"
#import
-// This coupling is needed for backwards compatibility in MTLModel's deprecated
-// methods.
-#import "MTLJSONAdapter.h"
-#import "MTLModel+NSCoding.h"
-
// Used to cache the reflection performed in +propertyKeys.
static void *MTLModelCachedPropertyKeysKey = &MTLModelCachedPropertyKeysKey;
+// Associated in +generateAndCachePropertyKeys with a set of all transitory
+// property keys.
+static void *MTLModelCachedTransitoryPropertyKeysKey = &MTLModelCachedTransitoryPropertyKeysKey;
+
+// Associated in +generateAndCachePropertyKeys with a set of all permanent
+// property keys.
+static void *MTLModelCachedPermanentPropertyKeysKey = &MTLModelCachedPermanentPropertyKeysKey;
+
// Validates a value for an object and sets it if necessary.
//
// obj - The object for which the value is being validated. This value
@@ -67,6 +70,18 @@ static BOOL MTLValidateAndSetValue(id obj, NSString *key, id value, BOOL forceUp
@interface MTLModel ()
+// Inspects all properties of returned by +propertyKeys using
+// +storageBehaviorForPropertyWithKey and caches the results.
++ (void)generateAndCacheStorageBehaviors;
+
+// Returns a set of all property keys for which
+// +storageBehaviorForPropertyWithKey returned MTLPropertyStorageTransitory.
++ (NSSet *)transitoryPropertyKeys;
+
+// Returns a set of all property keys for which
+// +storageBehaviorForPropertyWithKey returned MTLPropertyStoragePermanent.
++ (NSSet *)permanentPropertyKeys;
+
// Enumerates all properties of the receiver's class hierarchy, starting at the
// receiver, and continuing up until (but not including) MTLModel.
//
@@ -80,6 +95,31 @@ @implementation MTLModel
#pragma mark Lifecycle
++ (void)generateAndCacheStorageBehaviors {
+ NSMutableSet *transitoryKeys = [NSMutableSet set];
+ NSMutableSet *permanentKeys = [NSMutableSet set];
+
+ for (NSString *propertyKey in self.propertyKeys) {
+ switch ([self storageBehaviorForPropertyWithKey:propertyKey]) {
+ case MTLPropertyStorageNone:
+ break;
+
+ case MTLPropertyStorageTransitory:
+ [transitoryKeys addObject:propertyKey];
+ break;
+
+ case MTLPropertyStoragePermanent:
+ [permanentKeys addObject:propertyKey];
+ break;
+ }
+ }
+
+ // It doesn't really matter if we replace another thread's work, since we do
+ // it atomically and the result should be the same.
+ objc_setAssociatedObject(self, MTLModelCachedTransitoryPropertyKeysKey, transitoryKeys, OBJC_ASSOCIATION_COPY);
+ objc_setAssociatedObject(self, MTLModelCachedPermanentPropertyKeysKey, permanentKeys, OBJC_ASSOCIATION_COPY);
+}
+
+ (instancetype)modelWithDictionary:(NSDictionary *)dictionary error:(NSError **)error {
return [[self alloc] initWithDictionary:dictionary error:error];
}
@@ -98,7 +138,7 @@ - (instancetype)initWithDictionary:(NSDictionary *)dictionary error:(NSError **)
// a new object to be stored in this variable (and we don't want ARC to
// double-free or leak the old or new values).
__autoreleasing id value = [dictionary objectForKey:key];
-
+
if ([value isEqual:NSNull.null]) value = nil;
BOOL success = MTLValidateAndSetValue(self, key, value, YES, error);
@@ -139,15 +179,11 @@ + (NSSet *)propertyKeys {
NSMutableSet *keys = [NSMutableSet set];
[self enumeratePropertiesUsingBlock:^(objc_property_t property, BOOL *stop) {
- mtl_propertyAttributes *attributes = mtl_copyPropertyAttributes(property);
- @onExit {
- free(attributes);
- };
-
- if (attributes->readonly && attributes->ivar == NULL) return;
-
NSString *key = @(property_getName(property));
- [keys addObject:key];
+
+ if ([self storageBehaviorForPropertyWithKey:key] != MTLPropertyStorageNone) {
+ [keys addObject:key];
+ }
}];
// It doesn't really matter if we replace another thread's work, since we do
@@ -157,13 +193,54 @@ + (NSSet *)propertyKeys {
return keys;
}
++ (NSSet *)transitoryPropertyKeys {
+ NSSet *transitoryPropertyKeys = objc_getAssociatedObject(self, MTLModelCachedTransitoryPropertyKeysKey);
+
+ if (transitoryPropertyKeys == nil) {
+ [self generateAndCacheStorageBehaviors];
+ transitoryPropertyKeys = objc_getAssociatedObject(self, MTLModelCachedTransitoryPropertyKeysKey);
+ }
+
+ return transitoryPropertyKeys;
+}
+
++ (NSSet *)permanentPropertyKeys {
+ NSSet *permanentPropertyKeys = objc_getAssociatedObject(self, MTLModelCachedPermanentPropertyKeysKey);
+
+ if (permanentPropertyKeys == nil) {
+ [self generateAndCacheStorageBehaviors];
+ permanentPropertyKeys = objc_getAssociatedObject(self, MTLModelCachedPermanentPropertyKeysKey);
+ }
+
+ return permanentPropertyKeys;
+}
+
- (NSDictionary *)dictionaryValue {
- return [self dictionaryWithValuesForKeys:self.class.propertyKeys.allObjects];
+ NSSet *keys = [self.class.transitoryPropertyKeys setByAddingObjectsFromSet:self.class.permanentPropertyKeys];
+
+ return [self dictionaryWithValuesForKeys:keys.allObjects];
+}
+
++ (MTLPropertyStorage)storageBehaviorForPropertyWithKey:(NSString *)propertyKey {
+ objc_property_t property = class_getProperty(self.class, propertyKey.UTF8String);
+
+ if (property == NULL) return MTLPropertyStorageNone;
+
+ mtl_propertyAttributes *attributes = mtl_copyPropertyAttributes(property);
+ @onExit {
+ free(attributes);
+ };
+
+ if (attributes->readonly && attributes->ivar == NULL) {
+ return MTLPropertyStorageNone;
+ } else {
+ return MTLPropertyStoragePermanent;
+ }
}
#pragma mark Merging
-- (void)mergeValueForKey:(NSString *)key fromModel:(MTLModel *)model {
+- (void)mergeValueForKey:(NSString *)key fromModel:(NSObject *)model {
NSParameterAssert(key != nil);
SEL selector = MTLSelectorWithCapitalizedKeyPattern("merge", key, "FromModel:");
@@ -183,8 +260,9 @@ - (void)mergeValueForKey:(NSString *)key fromModel:(MTLModel *)model {
[invocation invoke];
}
-- (void)mergeValuesForKeysFromModel:(MTLModel *)model {
+- (void)mergeValuesForKeysFromModel:(id)model {
NSSet *propertyKeys = model.class.propertyKeys;
+
for (NSString *key in self.class.propertyKeys) {
if (![propertyKeys containsObject:key]) continue;
@@ -214,13 +292,15 @@ - (instancetype)copyWithZone:(NSZone *)zone {
#pragma mark NSObject
- (NSString *)description {
- return [NSString stringWithFormat:@"<%@: %p> %@", self.class, self, self.dictionaryValue];
+ NSDictionary *permanentProperties = [self dictionaryWithValuesForKeys:self.class.permanentPropertyKeys.allObjects];
+
+ return [NSString stringWithFormat:@"<%@: %p> %@", self.class, self, permanentProperties];
}
- (NSUInteger)hash {
NSUInteger value = 0;
- for (NSString *key in self.class.propertyKeys) {
+ for (NSString *key in self.class.permanentPropertyKeys) {
value ^= [[self valueForKey:key] hash];
}
@@ -231,7 +311,7 @@ - (BOOL)isEqual:(MTLModel *)model {
if (self == model) return YES;
if (![model isMemberOfClass:self.class]) return NO;
- for (NSString *key in self.class.propertyKeys) {
+ for (NSString *key in self.class.permanentPropertyKeys) {
id selfValue = [self valueForKey:key];
id modelValue = [model valueForKey:key];
diff --git a/iOSStudy/Pods/Mantle/Mantle/MTLReflection.h b/iOSStudy/Pods/Mantle/Mantle/MTLReflection.h
index f4c100e..52c920b 100644
--- a/iOSStudy/Pods/Mantle/Mantle/MTLReflection.h
+++ b/iOSStudy/Pods/Mantle/Mantle/MTLReflection.h
@@ -8,24 +8,24 @@
#import
-// Creates a selector from a key and a constant string.
-//
-// key - The key to insert into the generated selector. This key should be in
-// its natural case.
-// suffix - A string to append to the key as part of the selector.
-//
-// Returns a selector, or NULL if the input strings cannot form a valid
-// selector.
+/// Creates a selector from a key and a constant string.
+///
+/// key - The key to insert into the generated selector. This key should be in
+/// its natural case.
+/// suffix - A string to append to the key as part of the selector.
+///
+/// Returns a selector, or NULL if the input strings cannot form a valid
+/// selector.
SEL MTLSelectorWithKeyPattern(NSString *key, const char *suffix) __attribute__((pure, nonnull(1, 2)));
-// Creates a selector from a key and a constant prefix and suffix.
-//
-// prefix - A string to prepend to the key as part of the selector.
-// key - The key to insert into the generated selector. This key should be in
-// its natural case, and will have its first letter capitalized when
-// inserted.
-// suffix - A string to append to the key as part of the selector.
-//
-// Returns a selector, or NULL if the input strings cannot form a valid
-// selector.
+/// Creates a selector from a key and a constant prefix and suffix.
+///
+/// prefix - A string to prepend to the key as part of the selector.
+/// key - The key to insert into the generated selector. This key should be in
+/// its natural case, and will have its first letter capitalized when
+/// inserted.
+/// suffix - A string to append to the key as part of the selector.
+///
+/// Returns a selector, or NULL if the input strings cannot form a valid
+/// selector.
SEL MTLSelectorWithCapitalizedKeyPattern(const char *prefix, NSString *key, const char *suffix) __attribute__((pure, nonnull(1, 2, 3)));
diff --git a/iOSStudy/Pods/Mantle/Mantle/MTLTransformerErrorHandling.h b/iOSStudy/Pods/Mantle/Mantle/MTLTransformerErrorHandling.h
new file mode 100644
index 0000000..2726d91
--- /dev/null
+++ b/iOSStudy/Pods/Mantle/Mantle/MTLTransformerErrorHandling.h
@@ -0,0 +1,66 @@
+//
+// MTLTransformerErrorHandling.h
+// Mantle
+//
+// Created by Robert Böhnke on 10/6/13.
+// Copyright (c) 2013 GitHub. All rights reserved.
+//
+
+#import
+
+/// The domain for errors originating from the MTLTransformerErrorHandling
+/// protocol.
+///
+/// Transformers conforming to this protocol are expected to use this error
+/// domain if the transformation fails.
+extern NSString * const MTLTransformerErrorHandlingErrorDomain;
+
+/// Used to indicate that the input value was illegal.
+///
+/// Transformers conforming to this protocol are expected to use this error code
+/// if the transformation fails due to an invalid input value.
+extern const NSInteger MTLTransformerErrorHandlingErrorInvalidInput;
+
+/// Associated with the invalid input value.
+///
+/// Transformers conforming to this protocol are expected to associate this key
+/// with the invalid input in the userInfo dictionary.
+extern NSString * const MTLTransformerErrorHandlingInputValueErrorKey;
+
+/// This protocol can be implemented by NSValueTransformer subclasses to
+/// communicate errors that occur during transformation.
+@protocol MTLTransformerErrorHandling
+@required
+
+/// Transforms a value, returning any error that occurred during transformation.
+///
+/// value - The value to transform.
+/// success - If not NULL, this will be set to a boolean indicating whether the
+/// transformation was successful.
+/// error - If not NULL, this may be set to an error that occurs during
+/// transforming the value.
+///
+/// Returns the result of the transformation which may be nil. Clients should
+/// inspect the success parameter to decide how to proceed with the result.
+- (id)transformedValue:(id)value success:(BOOL *)success error:(NSError **)error;
+
+@optional
+
+/// Reverse-transforms a value, returning any error that occurred during
+/// transformation.
+///
+/// Transformers conforming to this protocol are expected to implemented this
+/// method if they support reverse transformation.
+///
+/// value - The value to transform.
+/// success - If not NULL, this will be set to a boolean indicating whether the
+/// transformation was successful.
+/// error - If not NULL, this may be set to an error that occurs during
+/// transforming the value.
+///
+/// Returns the result of the reverse transformation which may be nil. Clients
+/// should inspect the success parameter to decide how to proceed with the
+/// result.
+- (id)reverseTransformedValue:(id)value success:(BOOL *)success error:(NSError **)error;
+
+@end
diff --git a/iOSStudy/Pods/Mantle/Mantle/MTLTransformerErrorHandling.m b/iOSStudy/Pods/Mantle/Mantle/MTLTransformerErrorHandling.m
new file mode 100644
index 0000000..962e2c0
--- /dev/null
+++ b/iOSStudy/Pods/Mantle/Mantle/MTLTransformerErrorHandling.m
@@ -0,0 +1,15 @@
+//
+// MTLTransformerErrorHandling.h
+// Mantle
+//
+// Created by Robert Böhnke on 10/6/13.
+// Copyright (c) 2013 GitHub. All rights reserved.
+//
+
+#import "MTLTransformerErrorHandling.h"
+
+NSString * const MTLTransformerErrorHandlingErrorDomain = @"MTLTransformerErrorHandlingErrorDomain";
+
+const NSInteger MTLTransformerErrorHandlingErrorInvalidInput = 1;
+
+NSString * const MTLTransformerErrorHandlingInputValueErrorKey = @"MTLTransformerErrorHandlingInputValueErrorKey";
diff --git a/iOSStudy/Pods/Mantle/Mantle/MTLValueTransformer.h b/iOSStudy/Pods/Mantle/Mantle/MTLValueTransformer.h
index 231b59f..5deda94 100644
--- a/iOSStudy/Pods/Mantle/Mantle/MTLValueTransformer.h
+++ b/iOSStudy/Pods/Mantle/Mantle/MTLValueTransformer.h
@@ -8,22 +8,45 @@
#import
-typedef id (^MTLValueTransformerBlock)(id);
+#import "MTLTransformerErrorHandling.h"
-//
-// A value transformer supporting block-based transformation.
-//
-@interface MTLValueTransformer : NSValueTransformer
+/// A block that represents a transformation.
+///
+/// value - The value to transform.
+/// success - The block must set this parameter to indicate whether the
+/// transformation was successful.
+/// MTLValueTransformer will always call this block with *success
+/// initialized to YES.
+/// error - If not NULL, this may be set to an error that occurs during
+/// transforming the value.
+///
+/// Returns the result of the transformation, which may be nil.
+typedef id (^MTLValueTransformerBlock)(id value, BOOL *success, NSError **error);
+
+///
+/// A value transformer supporting block-based transformation.
+///
+@interface MTLValueTransformer : NSValueTransformer
+
+/// Returns a transformer which transforms values using the given block. Reverse
+/// transformations will not be allowed.
++ (instancetype)transformerUsingForwardBlock:(MTLValueTransformerBlock)transformation;
+
+/// Returns a transformer which transforms values using the given block, for
+/// forward or reverse transformations.
++ (instancetype)transformerUsingReversibleBlock:(MTLValueTransformerBlock)transformation;
+
+/// Returns a transformer which transforms values using the given blocks.
++ (instancetype)transformerUsingForwardBlock:(MTLValueTransformerBlock)forwardTransformation reverseBlock:(MTLValueTransformerBlock)reverseTransformation;
+
+@end
+
+@interface MTLValueTransformer (Deprecated)
-// Returns a transformer which transforms values using the given block. Reverse
-// transformations will not be allowed.
-+ (instancetype)transformerWithBlock:(MTLValueTransformerBlock)transformationBlock;
++ (NSValueTransformer *)transformerWithBlock:(id (^)(id))transformationBlock __attribute__((deprecated("Replaced by +transformerUsingForwardBlock:")));
-// Returns a transformer which transforms values using the given block, for
-// forward or reverse transformations.
-+ (instancetype)reversibleTransformerWithBlock:(MTLValueTransformerBlock)transformationBlock;
++ (NSValueTransformer *)reversibleTransformerWithBlock:(id (^)(id))transformationBlock __attribute__((deprecated("Replaced by +transformerUsingReversibleBlock:")));
-// Returns a transformer which transforms values using the given blocks.
-+ (instancetype)reversibleTransformerWithForwardBlock:(MTLValueTransformerBlock)forwardBlock reverseBlock:(MTLValueTransformerBlock)reverseBlock;
++ (NSValueTransformer *)reversibleTransformerWithForwardBlock:(id (^)(id))forwardBlock reverseBlock:(id (^)(id))reverseBlock __attribute__((deprecated("Replaced by +transformerUsingForwardBlock:reverseBlock:")));
@end
diff --git a/iOSStudy/Pods/Mantle/Mantle/MTLValueTransformer.m b/iOSStudy/Pods/Mantle/Mantle/MTLValueTransformer.m
index 5400d45..701627b 100644
--- a/iOSStudy/Pods/Mantle/Mantle/MTLValueTransformer.m
+++ b/iOSStudy/Pods/Mantle/Mantle/MTLValueTransformer.m
@@ -26,15 +26,15 @@ @implementation MTLValueTransformer
#pragma mark Lifecycle
-+ (instancetype)transformerWithBlock:(MTLValueTransformerBlock)transformationBlock {
- return [[self alloc] initWithForwardBlock:transformationBlock reverseBlock:nil];
++ (instancetype)transformerUsingForwardBlock:(MTLValueTransformerBlock)forwardBlock {
+ return [[self alloc] initWithForwardBlock:forwardBlock reverseBlock:nil];
}
-+ (instancetype)reversibleTransformerWithBlock:(MTLValueTransformerBlock)transformationBlock {
- return [self reversibleTransformerWithForwardBlock:transformationBlock reverseBlock:transformationBlock];
++ (instancetype)transformerUsingReversibleBlock:(MTLValueTransformerBlock)reversibleBlock {
+ return [self transformerUsingForwardBlock:reversibleBlock reverseBlock:reversibleBlock];
}
-+ (instancetype)reversibleTransformerWithForwardBlock:(MTLValueTransformerBlock)forwardBlock reverseBlock:(MTLValueTransformerBlock)reverseBlock {
++ (instancetype)transformerUsingForwardBlock:(MTLValueTransformerBlock)forwardBlock reverseBlock:(MTLValueTransformerBlock)reverseBlock {
return [[MTLReversibleValueTransformer alloc] initWithForwardBlock:forwardBlock reverseBlock:reverseBlock];
}
@@ -57,11 +57,26 @@ + (BOOL)allowsReverseTransformation {
}
+ (Class)transformedValueClass {
- return [NSObject class];
+ return NSObject.class;
}
- (id)transformedValue:(id)value {
- return self.forwardBlock(value);
+ NSError *error = nil;
+ BOOL success = YES;
+
+ return self.forwardBlock(value, &success, &error);
+}
+
+- (id)transformedValue:(id)value success:(BOOL *)outerSuccess error:(NSError **)outerError {
+ NSError *error = nil;
+ BOOL success = YES;
+
+ id transformedValue = self.forwardBlock(value, &success, &error);
+
+ if (outerSuccess != NULL) *outerSuccess = success;
+ if (outerError != NULL) *outerError = error;
+
+ return transformedValue;
}
@end
@@ -82,7 +97,54 @@ + (BOOL)allowsReverseTransformation {
}
- (id)reverseTransformedValue:(id)value {
- return self.reverseBlock(value);
+ NSError *error = nil;
+ BOOL success = YES;
+
+ return self.reverseBlock(value, &success, &error);
+}
+
+- (id)reverseTransformedValue:(id)value success:(BOOL *)outerSuccess error:(NSError **)outerError {
+ NSError *error = nil;
+ BOOL success = YES;
+
+ id transformedValue = self.reverseBlock(value, &success, &error);
+
+ if (outerSuccess != NULL) *outerSuccess = success;
+ if (outerError != NULL) *outerError = error;
+
+ return transformedValue;
}
@end
+
+
+@implementation MTLValueTransformer (Deprecated)
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-implementations"
+
++ (instancetype)transformerWithBlock:(id (^)(id))transformationBlock {
+ return [self transformerUsingForwardBlock:^(id value, BOOL *success, NSError **error) {
+ return transformationBlock(value);
+ }];
+}
+
++ (instancetype)reversibleTransformerWithBlock:(id (^)(id))transformationBlock {
+ return [self transformerUsingReversibleBlock:^(id value, BOOL *success, NSError **error) {
+ return transformationBlock(value);
+ }];
+}
+
++ (instancetype)reversibleTransformerWithForwardBlock:(id (^)(id))forwardBlock reverseBlock:(id (^)(id))reverseBlock {
+ return [self
+ transformerUsingForwardBlock:^(id value, BOOL *success, NSError **error) {
+ return forwardBlock(value);
+ }
+ reverseBlock:^(id value, BOOL *success, NSError **error) {
+ return reverseBlock(value);
+ }];
+}
+
+#pragma clang diagnostic pop
+
+@end
diff --git a/iOSStudy/Pods/Mantle/Mantle/Mantle.h b/iOSStudy/Pods/Mantle/Mantle/Mantle.h
index ebd74e7..102b7ad 100644
--- a/iOSStudy/Pods/Mantle/Mantle/Mantle.h
+++ b/iOSStudy/Pods/Mantle/Mantle/Mantle.h
@@ -15,12 +15,13 @@ FOUNDATION_EXPORT double MantleVersionNumber;
FOUNDATION_EXPORT const unsigned char MantleVersionString[];
#import
-#import
#import
#import
#import
+#import
#import
#import
+#import
#import
#import
#import
diff --git a/iOSStudy/Pods/Mantle/Mantle/NSArray+MTLManipulationAdditions.h b/iOSStudy/Pods/Mantle/Mantle/NSArray+MTLManipulationAdditions.h
index fd7347c..b8c2b56 100644
--- a/iOSStudy/Pods/Mantle/Mantle/NSArray+MTLManipulationAdditions.h
+++ b/iOSStudy/Pods/Mantle/Mantle/NSArray+MTLManipulationAdditions.h
@@ -10,19 +10,19 @@
@interface NSArray (MTLManipulationAdditions)
-// The first object in the array or nil if the array is empty.
-// Forwards to `firstObject` which has been first declared in iOS7, but works with iOS4/10.6.
+/// The first object in the array or nil if the array is empty.
+/// Forwards to `firstObject` which has been first declared in iOS7, but works with iOS4/10.6.
@property (nonatomic, readonly, strong) id mtl_firstObject;
-// Returns a new array without all instances of the given object.
+/// Returns a new array without all instances of the given object.
- (NSArray *)mtl_arrayByRemovingObject:(id)object;
-// Returns a new array without the first object. If the array is empty, it
-// returns the empty array.
+/// Returns a new array without the first object. If the array is empty, it
+/// returns the empty array.
- (NSArray *)mtl_arrayByRemovingFirstObject;
-// Returns a new array without the last object. If the array is empty, it
-// returns the empty array.
+/// Returns a new array without the last object. If the array is empty, it
+/// returns the empty array.
- (NSArray *)mtl_arrayByRemovingLastObject;
@end
diff --git a/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLJSONKeyPath.h b/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLJSONKeyPath.h
new file mode 100644
index 0000000..eb70151
--- /dev/null
+++ b/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLJSONKeyPath.h
@@ -0,0 +1,27 @@
+//
+// NSDictionary+MTLJSONKeyPath.h
+// Mantle
+//
+// Created by Robert Böhnke on 19/03/14.
+// Copyright (c) 2014 GitHub. All rights reserved.
+//
+
+#import
+
+@interface NSDictionary (MTLJSONKeyPath)
+
+/// Looks up the value of a key path in the receiver.
+///
+/// JSONKeyPath - The key path that should be resolved. Every element along this
+/// key path needs to be an instance of NSDictionary for the
+/// resolving to be successful.
+/// success - If not NULL, this will be set to a boolean indicating whether
+/// the key path was resolved successfully.
+/// error - If not NULL, this may be set to an error that occurs during
+/// resolving the value.
+///
+/// Returns the value for the key path which may be nil. Clients should inspect
+/// the success parameter to decide how to proceed with the result.
+- (id)mtl_valueForJSONKeyPath:(NSString *)JSONKeyPath success:(BOOL *)success error:(NSError **)error;
+
+@end
diff --git a/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLJSONKeyPath.m b/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLJSONKeyPath.m
new file mode 100644
index 0000000..03ee2ad
--- /dev/null
+++ b/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLJSONKeyPath.m
@@ -0,0 +1,47 @@
+//
+// NSDictionary+MTLJSONKeyPath.m
+// Mantle
+//
+// Created by Robert Böhnke on 19/03/14.
+// Copyright (c) 2014 GitHub. All rights reserved.
+//
+
+#import "NSDictionary+MTLJSONKeyPath.h"
+
+#import "MTLJSONAdapter.h"
+
+@implementation NSDictionary (MTLJSONKeyPath)
+
+- (id)mtl_valueForJSONKeyPath:(NSString *)JSONKeyPath success:(BOOL *)success error:(NSError **)error {
+ NSArray *components = [JSONKeyPath componentsSeparatedByString:@"."];
+
+ id result = self;
+ for (NSString *component in components) {
+ // Check the result before resolving the key path component to not
+ // affect the last value of the path.
+ if (result == nil || result == NSNull.null) break;
+
+ if (![result isKindOfClass:NSDictionary.class]) {
+ if (error != NULL) {
+ NSDictionary *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Invalid JSON dictionary", @""),
+ NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"JSON key path %1$@ could not resolved because an incompatible JSON dictionary was supplied: \"%2$@\"", @""), JSONKeyPath, self]
+ };
+
+ *error = [NSError errorWithDomain:MTLJSONAdapterErrorDomain code:MTLJSONAdapterErrorInvalidJSONDictionary userInfo:userInfo];
+ }
+
+ if (success != NULL) *success = NO;
+
+ return nil;
+ }
+
+ result = result[component];
+ }
+
+ if (success != NULL) *success = YES;
+
+ return result;
+}
+
+@end
diff --git a/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLManipulationAdditions.h b/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLManipulationAdditions.h
index 83254d3..6126293 100644
--- a/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLManipulationAdditions.h
+++ b/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLManipulationAdditions.h
@@ -10,16 +10,22 @@
@interface NSDictionary (MTLManipulationAdditions)
-// Merges the keys and values from the given dictionary into the receiver. If
-// both the receiver and `dictionary` have a given key, the value from
-// `dictionary` is used.
-//
-// Returns a new dictionary containing the entries of the receiver combined with
-// those of `dictionary`.
+/// Merges the keys and values from the given dictionary into the receiver. If
+/// both the receiver and `dictionary` have a given key, the value from
+/// `dictionary` is used.
+///
+/// Returns a new dictionary containing the entries of the receiver combined with
+/// those of `dictionary`.
- (NSDictionary *)mtl_dictionaryByAddingEntriesFromDictionary:(NSDictionary *)dictionary;
-// Creates a new dictionary with all the entries for the given keys removed from
-// the receiver.
-- (NSDictionary *)mtl_dictionaryByRemovingEntriesWithKeys:(NSSet *)keys;
+/// Creates a new dictionary with all the entries for the given keys removed from
+/// the receiver.
+- (NSDictionary *)mtl_dictionaryByRemovingValuesForKeys:(NSArray *)keys;
+
+@end
+
+@interface NSDictionary (MTLManipulationAdditions_Deprecated)
+
+- (NSDictionary *)mtl_dictionaryByRemovingEntriesWithKeys:(NSSet *)keys __attribute__((deprecated("Replaced by -mtl_dictionaryByRemovingValuesForKeys:")));
@end
diff --git a/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLManipulationAdditions.m b/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLManipulationAdditions.m
index 0ed5746..a7a1d7a 100644
--- a/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLManipulationAdditions.m
+++ b/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLManipulationAdditions.m
@@ -16,10 +16,23 @@ - (NSDictionary *)mtl_dictionaryByAddingEntriesFromDictionary:(NSDictionary *)di
return result;
}
-- (NSDictionary *)mtl_dictionaryByRemovingEntriesWithKeys:(NSSet *)keys {
+- (NSDictionary *)mtl_dictionaryByRemovingValuesForKeys:(NSArray *)keys {
NSMutableDictionary *result = [self mutableCopy];
- [result removeObjectsForKeys:keys.allObjects];
+ [result removeObjectsForKeys:keys];
return result;
}
@end
+
+@implementation NSDictionary (MTLManipulationAdditions_Deprecated)
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated"
+
+- (NSDictionary *)mtl_dictionaryByRemovingEntriesWithKeys:(NSSet *)keys {
+ return [self mtl_dictionaryByRemovingValuesForKeys:keys.allObjects];
+}
+
+#pragma clang diagnostic pop
+
+@end
diff --git a/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLMappingAdditions.h b/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLMappingAdditions.h
new file mode 100644
index 0000000..0071c89
--- /dev/null
+++ b/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLMappingAdditions.h
@@ -0,0 +1,21 @@
+//
+// NSDictionary+MTLMappingAdditions.h
+// Mantle
+//
+// Created by Robert Böhnke on 10/31/13.
+// Copyright (c) 2013 GitHub. All rights reserved.
+//
+
+#import
+
+@interface NSDictionary (MTLMappingAdditions)
+
+/// Creates an identity mapping for serialization.
+///
+/// class - A subclass of MTLModel.
+///
+/// Returns a dictionary that maps all properties of the given class to
+/// themselves.
++ (NSDictionary *)mtl_identityPropertyMapWithModel:(Class)class;
+
+@end
diff --git a/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLMappingAdditions.m b/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLMappingAdditions.m
new file mode 100644
index 0000000..6ed8ffc
--- /dev/null
+++ b/iOSStudy/Pods/Mantle/Mantle/NSDictionary+MTLMappingAdditions.m
@@ -0,0 +1,23 @@
+//
+// NSDictionary+MTLMappingAdditions.m
+// Mantle
+//
+// Created by Robert Böhnke on 10/31/13.
+// Copyright (c) 2013 GitHub. All rights reserved.
+//
+
+#import "MTLModel.h"
+
+#import "NSDictionary+MTLMappingAdditions.h"
+
+@implementation NSDictionary (MTLMappingAdditions)
+
++ (NSDictionary *)mtl_identityPropertyMapWithModel:(Class)class {
+ NSCParameterAssert([class isSubclassOfClass:MTLModel.class]);
+
+ NSArray *propertyKeys = [class propertyKeys].allObjects;
+
+ return [NSDictionary dictionaryWithObjects:propertyKeys forKeys:propertyKeys];
+}
+
+@end
diff --git a/iOSStudy/Pods/Mantle/Mantle/NSError+MTLModelException.h b/iOSStudy/Pods/Mantle/Mantle/NSError+MTLModelException.h
index f7c1e9e..3c82818 100644
--- a/iOSStudy/Pods/Mantle/Mantle/NSError+MTLModelException.h
+++ b/iOSStudy/Pods/Mantle/Mantle/NSError+MTLModelException.h
@@ -10,14 +10,14 @@
@interface NSError (MTLModelException)
-// Creates a new error for an exception that occured during updating an
-// MTLModel.
-//
-// exception - The exception that was thrown while updating the model.
-// This argument must not be nil.
-//
-// Returns an error that takes its localized description and failure reason
-// from the exception.
+/// Creates a new error for an exception that occured during updating an
+/// MTLModel.
+///
+/// exception - The exception that was thrown while updating the model.
+/// This argument must not be nil.
+///
+/// Returns an error that takes its localized description and failure reason
+/// from the exception.
+ (instancetype)mtl_modelErrorWithException:(NSException *)exception;
@end
diff --git a/iOSStudy/Pods/Mantle/Mantle/NSObject+MTLComparisonAdditions.h b/iOSStudy/Pods/Mantle/Mantle/NSObject+MTLComparisonAdditions.h
index 4f7c03e..0ca13e6 100644
--- a/iOSStudy/Pods/Mantle/Mantle/NSObject+MTLComparisonAdditions.h
+++ b/iOSStudy/Pods/Mantle/Mantle/NSObject+MTLComparisonAdditions.h
@@ -11,5 +11,5 @@
#import
-// Returns whether both objects are identical or equal via -isEqual:
+/// Returns whether both objects are identical or equal via -isEqual:
BOOL MTLEqualObjects(id obj1, id obj2);
diff --git a/iOSStudy/Pods/Mantle/Mantle/NSValueTransformer+MTLInversionAdditions.h b/iOSStudy/Pods/Mantle/Mantle/NSValueTransformer+MTLInversionAdditions.h
index eefceec..ca29b98 100644
--- a/iOSStudy/Pods/Mantle/Mantle/NSValueTransformer+MTLInversionAdditions.h
+++ b/iOSStudy/Pods/Mantle/Mantle/NSValueTransformer+MTLInversionAdditions.h
@@ -10,12 +10,12 @@
@interface NSValueTransformer (MTLInversionAdditions)
-// Flips the direction of the receiver's transformation, such that
-// -transformedValue: will become -reverseTransformedValue:, and vice-versa.
-//
-// The receiver must allow reverse transformation.
-//
-// Returns an inverted transformer.
+/// Flips the direction of the receiver's transformation, such that
+/// -transformedValue: will become -reverseTransformedValue:, and vice-versa.
+///
+/// The receiver must allow reverse transformation.
+///
+/// Returns an inverted transformer.
- (NSValueTransformer *)mtl_invertedTransformer;
@end
diff --git a/iOSStudy/Pods/Mantle/Mantle/NSValueTransformer+MTLInversionAdditions.m b/iOSStudy/Pods/Mantle/Mantle/NSValueTransformer+MTLInversionAdditions.m
index 71fe4b0..2e536d6 100644
--- a/iOSStudy/Pods/Mantle/Mantle/NSValueTransformer+MTLInversionAdditions.m
+++ b/iOSStudy/Pods/Mantle/Mantle/NSValueTransformer+MTLInversionAdditions.m
@@ -7,6 +7,7 @@
//
#import "NSValueTransformer+MTLInversionAdditions.h"
+#import "MTLTransformerErrorHandling.h"
#import "MTLValueTransformer.h"
@implementation NSValueTransformer (MTLInversionAdditions)
@@ -14,11 +15,23 @@ @implementation NSValueTransformer (MTLInversionAdditions)
- (NSValueTransformer *)mtl_invertedTransformer {
NSParameterAssert(self.class.allowsReverseTransformation);
- return [MTLValueTransformer reversibleTransformerWithForwardBlock:^(id value) {
- return [self reverseTransformedValue:value];
- } reverseBlock:^(id value) {
- return [self transformedValue:value];
- }];
+ if ([self conformsToProtocol:@protocol(MTLTransformerErrorHandling)]) {
+ NSParameterAssert([self respondsToSelector:@selector(reverseTransformedValue:success:error:)]);
+
+ id errorHandlingSelf = (id)self;
+
+ return [MTLValueTransformer transformerUsingForwardBlock:^(id value, BOOL *success, NSError **error) {
+ return [errorHandlingSelf reverseTransformedValue:value success:success error:error];
+ } reverseBlock:^(id value, BOOL *success, NSError **error) {
+ return [errorHandlingSelf transformedValue:value success:success error:error];
+ }];
+ } else {
+ return [MTLValueTransformer transformerUsingForwardBlock:^(id value, BOOL *success, NSError **error) {
+ return [self reverseTransformedValue:value];
+ } reverseBlock:^(id value, BOOL *success, NSError **error) {
+ return [self transformedValue:value];
+ }];
+ }
}
@end
diff --git a/iOSStudy/Pods/Mantle/Mantle/NSValueTransformer+MTLPredefinedTransformerAdditions.h b/iOSStudy/Pods/Mantle/Mantle/NSValueTransformer+MTLPredefinedTransformerAdditions.h
index 78a6b19..5369bf5 100644
--- a/iOSStudy/Pods/Mantle/Mantle/NSValueTransformer+MTLPredefinedTransformerAdditions.h
+++ b/iOSStudy/Pods/Mantle/Mantle/NSValueTransformer+MTLPredefinedTransformerAdditions.h
@@ -8,77 +8,72 @@
#import
-// The name for a value transformer that converts strings into URLs and back.
+#import "MTLTransformerErrorHandling.h"
+
+/// The name for a value transformer that converts strings into URLs and back.
extern NSString * const MTLURLValueTransformerName;
-// Ensure an NSNumber is backed by __NSCFBoolean/CFBooleanRef
-//
-// NSJSONSerialization, and likely other serialization libraries, ordinarily
-// serialize NSNumbers as numbers, and thus booleans would be serialized as
-// 0/1. The exception is when the NSNumber is backed by __NSCFBoolean, which,
-// though very much an implementation detail, is detected and serialized as a
-// proper boolean.
+/// Ensure an NSNumber is backed by __NSCFBoolean/CFBooleanRef
+///
+/// NSJSONSerialization, and likely other serialization libraries, ordinarily
+/// serialize NSNumbers as numbers, and thus booleans would be serialized as
+/// 0/1. The exception is when the NSNumber is backed by __NSCFBoolean, which,
+/// though very much an implementation detail, is detected and serialized as a
+/// proper boolean.
extern NSString * const MTLBooleanValueTransformerName;
@interface NSValueTransformer (MTLPredefinedTransformerAdditions)
-// Creates a reversible transformer to convert a JSON dictionary into a MTLModel
-// object, and vice-versa.
-//
-// modelClass - The MTLModel subclass to attempt to parse from the JSON. This
-// class must conform to . This argument must
-// not be nil.
-//
-// Returns a reversible transformer which uses MTLJSONAdapter for transforming
-// values back and forth.
-+ (NSValueTransformer *)mtl_JSONDictionaryTransformerWithModelClass:(Class)modelClass;
-
-// Creates a reversible transformer to convert an array of JSON dictionaries
-// into an array of MTLModel objects, and vice-versa.
-//
-// modelClass - The MTLModel subclass to attempt to parse from each JSON
-// dictionary. This class must conform to .
-// This argument must not be nil.
-//
-// Returns a reversible transformer which uses MTLJSONAdapter for transforming
-// array elements back and forth.
-+ (NSValueTransformer *)mtl_JSONArrayTransformerWithModelClass:(Class)modelClass;
+/// An optionally reversible transformer which applies the given transformer to
+/// each element of an array.
+///
+/// transformer - The transformer to apply to each element. If the transformer
+/// is reversible, the transformer returned by this method will be
+/// reversible. This argument must not be nil.
+///
+/// Returns a transformer which applies a transformation to each element of an
+/// array.
++ (NSValueTransformer *)mtl_arrayMappingTransformerWithTransformer:(NSValueTransformer *)transformer;
-// A reversible value transformer to transform between the keys and objects of a
-// dictionary.
-//
-// dictionary - The dictionary whose keys and values should be
-// transformed between. This argument must not be nil.
-// defaultValue - The result to fall back to, in case no key matching the
-// input value was found during a forward transformation.
-// reverseDefaultValue - The result to fall back to, in case no value matching
-// the input value was found during a reverse
-// transformation.
-//
-// Can for example be used for transforming between enum values and their string
-// representation.
-//
-// NSValueTransformer *valueTransformer = [NSValueTransformer mtl_valueMappingTransformerWithDictionary:@{
-// @"foo": @(EnumDataTypeFoo),
-// @"bar": @(EnumDataTypeBar),
-// } defaultValue: @(EnumDataTypeUndefined) reverseDefaultValue: @"undefined"];
-//
-// Returns a transformer that will map from keys to values in dictionary
-// for forward transformation, and from values to keys for reverse
-// transformations. If no matching key or value can be found, the respective
-// default value is returned.
-+ (NSValueTransformer *)mtl_valueMappingTransformerWithDictionary:(NSDictionary *)dictionary defaultValue:(id)defaultValue reverseDefaultValue:(id)reverseDefaultValue;
+/// A reversible value transformer to transform between the keys and objects of a
+/// dictionary.
+///
+/// dictionary - The dictionary whose keys and values should be
+/// transformed between. This argument must not be nil.
+/// defaultValue - The result to fall back to, in case no key matching the
+/// input value was found during a forward transformation.
+/// reverseDefaultValue - The result to fall back to, in case no value matching
+/// the input value was found during a reverse
+/// transformation.
+///
+/// Can for example be used for transforming between enum values and their string
+/// representation.
+///
+/// NSValueTransformer *valueTransformer = [NSValueTransformer mtl_valueMappingTransformerWithDictionary:@{
+/// @"foo": @(EnumDataTypeFoo),
+/// @"bar": @(EnumDataTypeBar),
+/// } defaultValue: @(EnumDataTypeUndefined) reverseDefaultValue: @"undefined"];
+///
+/// Returns a transformer which will map from keys to objects for forward
+/// transformations, and from objects to keys for reverse transformations.
++ (NSValueTransformer *)mtl_valueMappingTransformerWithDictionary:(NSDictionary *)dictionary defaultValue:(id)defaultValue reverseDefaultValue:(id)reverseDefaultValue;
-// Returns a value transformer created by calling
-// `+mtl_valueMappingTransformerWithDictionary:defaultValue:reverseDefaultValue:`
-// with a default value of `nil` and a reverse default value of `nil`.
-+ (NSValueTransformer *)mtl_valueMappingTransformerWithDictionary:(NSDictionary *)dictionary;
+/// Returns a value transformer created by calling
+/// `+mtl_valueMappingTransformerWithDictionary:defaultValue:reverseDefaultValue:`
+/// with a default value of `nil` and a reverse default value of `nil`.
++ (NSValueTransformer *)mtl_valueMappingTransformerWithDictionary:(NSDictionary *)dictionary;
-@end
+/// A value transformer that errors if the transformed value are not of the given
+/// class.
+///
+/// class - The expected class. This argument must not be nil.
+///
+/// Returns a transformer which will return an error if the transformed in value
+/// is not a member of class. Otherwise, the value is simply passed through.
++ (NSValueTransformer *)mtl_validatingTransformerForClass:(Class)class;
-@interface NSValueTransformer (UnavailableMTLPredefinedTransformerAdditions)
++ (NSValueTransformer *)mtl_JSONDictionaryTransformerWithModelClass:(Class)modelClass __attribute__((deprecated("Replaced by +[MTLJSONAdapter dictionaryTransformerWithModelClass:]")));
-+ (NSValueTransformer *)mtl_externalRepresentationTransformerWithModelClass:(Class)modelClass __attribute__((deprecated("Replaced by +mtl_JSONDictionaryTransformerWithModelClass:")));
-+ (NSValueTransformer *)mtl_externalRepresentationArrayTransformerWithModelClass:(Class)modelClass __attribute__((deprecated("Replaced by +mtl_JSONArrayTransformerWithModelClass:")));
++ (NSValueTransformer *)mtl_JSONArrayTransformerWithModelClass:(Class)modelClass __attribute__((deprecated("Replaced by +[MTLJSONAdapter arrayTransformerWithModelClass:]")));
@end
diff --git a/iOSStudy/Pods/Mantle/Mantle/NSValueTransformer+MTLPredefinedTransformerAdditions.m b/iOSStudy/Pods/Mantle/Mantle/NSValueTransformer+MTLPredefinedTransformerAdditions.m
index 10622a0..407998d 100644
--- a/iOSStudy/Pods/Mantle/Mantle/NSValueTransformer+MTLPredefinedTransformerAdditions.m
+++ b/iOSStudy/Pods/Mantle/Mantle/NSValueTransformer+MTLPredefinedTransformerAdditions.m
@@ -21,20 +21,79 @@ @implementation NSValueTransformer (MTLPredefinedTransformerAdditions)
+ (void)load {
@autoreleasepool {
MTLValueTransformer *URLValueTransformer = [MTLValueTransformer
- reversibleTransformerWithForwardBlock:^ id (NSString *str) {
- if (![str isKindOfClass:NSString.class]) return nil;
- return [NSURL URLWithString:str];
+ transformerUsingForwardBlock:^ id (NSString *str, BOOL *success, NSError **error) {
+ if (str == nil) return nil;
+
+ if (![str isKindOfClass:NSString.class]) {
+ if (error != NULL) {
+ NSDictionary *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Could not convert string to URL", @""),
+ NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"Expected an NSString, got: %@.", @""), str],
+ MTLTransformerErrorHandlingInputValueErrorKey : str
+ };
+
+ *error = [NSError errorWithDomain:MTLTransformerErrorHandlingErrorDomain code:MTLTransformerErrorHandlingErrorInvalidInput userInfo:userInfo];
+ }
+ *success = NO;
+ return nil;
+ }
+
+ NSURL *result = [NSURL URLWithString:str];
+
+ if (result == nil) {
+ if (error != NULL) {
+ NSDictionary *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Could not convert string to URL", @""),
+ NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"Input URL string %@ was malformed", @""), str],
+ MTLTransformerErrorHandlingInputValueErrorKey : str
+ };
+
+ *error = [NSError errorWithDomain:MTLTransformerErrorHandlingErrorDomain code:MTLTransformerErrorHandlingErrorInvalidInput userInfo:userInfo];
+ }
+ *success = NO;
+ return nil;
+ }
+
+ return result;
}
- reverseBlock:^ id (NSURL *URL) {
- if (![URL isKindOfClass:NSURL.class]) return nil;
+ reverseBlock:^ id (NSURL *URL, BOOL *success, NSError **error) {
+ if (URL == nil) return nil;
+
+ if (![URL isKindOfClass:NSURL.class]) {
+ if (error != NULL) {
+ NSDictionary *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Could not convert URL to string", @""),
+ NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"Expected an NSURL, got: %@.", @""), URL],
+ MTLTransformerErrorHandlingInputValueErrorKey : URL
+ };
+
+ *error = [NSError errorWithDomain:MTLTransformerErrorHandlingErrorDomain code:MTLTransformerErrorHandlingErrorInvalidInput userInfo:userInfo];
+ }
+ *success = NO;
+ return nil;
+ }
return URL.absoluteString;
}];
-
+
[NSValueTransformer setValueTransformer:URLValueTransformer forName:MTLURLValueTransformerName];
MTLValueTransformer *booleanValueTransformer = [MTLValueTransformer
- reversibleTransformerWithBlock:^ id (NSNumber *boolean) {
- if (![boolean isKindOfClass:NSNumber.class]) return nil;
+ transformerUsingReversibleBlock:^ id (NSNumber *boolean, BOOL *success, NSError **error) {
+ if (boolean == nil) return nil;
+
+ if (![boolean isKindOfClass:NSNumber.class]) {
+ if (error != NULL) {
+ NSDictionary *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Could not convert number to boolean-backed number or vice-versa", @""),
+ NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"Expected an NSNumber, got: %@.", @""), boolean],
+ MTLTransformerErrorHandlingInputValueErrorKey : boolean
+ };
+
+ *error = [NSError errorWithDomain:MTLTransformerErrorHandlingErrorDomain code:MTLTransformerErrorHandlingErrorInvalidInput userInfo:userInfo];
+ }
+ *success = NO;
+ return nil;
+ }
return (NSNumber *)(boolean.boolValue ? kCFBooleanTrue : kCFBooleanFalse);
}];
@@ -44,98 +103,189 @@ + (void)load {
#pragma mark Customizable Transformers
-+ (NSValueTransformer *)mtl_JSONDictionaryTransformerWithModelClass:(Class)modelClass {
- NSParameterAssert([modelClass isSubclassOfClass:MTLModel.class]);
- NSParameterAssert([modelClass conformsToProtocol:@protocol(MTLJSONSerializing)]);
-
- return [MTLValueTransformer
- reversibleTransformerWithForwardBlock:^ id (id JSONDictionary) {
- if (JSONDictionary == nil) return nil;
-
- NSAssert([JSONDictionary isKindOfClass:NSDictionary.class], @"Expected a dictionary, got: %@", JSONDictionary);
-
- return [MTLJSONAdapter modelOfClass:modelClass fromJSONDictionary:JSONDictionary error:NULL];
++ (NSValueTransformer *)mtl_arrayMappingTransformerWithTransformer:(NSValueTransformer *)transformer {
+ NSParameterAssert(transformer != nil);
+
+ id (^forwardBlock)(NSArray *values, BOOL *success, NSError **error) = ^ id (NSArray *values, BOOL *success, NSError **error) {
+ if (values == nil) return nil;
+
+ if (![values isKindOfClass:NSArray.class]) {
+ if (error != NULL) {
+ NSDictionary *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Could not transform non-array type", @""),
+ NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"Expected an NSArray, got: %@.", @""), values],
+ MTLTransformerErrorHandlingInputValueErrorKey: values
+ };
+
+ *error = [NSError errorWithDomain:MTLTransformerErrorHandlingErrorDomain code:MTLTransformerErrorHandlingErrorInvalidInput userInfo:userInfo];
+ }
+ *success = NO;
+ return nil;
}
- reverseBlock:^ id (id model) {
- if (model == nil) return nil;
-
- NSAssert([model isKindOfClass:MTLModel.class], @"Expected a MTLModel object, got %@", model);
- NSAssert([model conformsToProtocol:@protocol(MTLJSONSerializing)], @"Expected a model object conforming to , got %@", model);
-
- return [MTLJSONAdapter JSONDictionaryFromModel:model];
- }];
-}
-
-+ (NSValueTransformer *)mtl_JSONArrayTransformerWithModelClass:(Class)modelClass {
- NSValueTransformer *dictionaryTransformer = [self mtl_JSONDictionaryTransformerWithModelClass:modelClass];
-
- return [MTLValueTransformer
- reversibleTransformerWithForwardBlock:^ id (NSArray *dictionaries) {
- if (dictionaries == nil) return nil;
-
- NSAssert([dictionaries isKindOfClass:NSArray.class], @"Expected an array of dictionaries, got: %@", dictionaries);
+
+ NSMutableArray *transformedValues = [NSMutableArray arrayWithCapacity:values.count];
+ NSInteger index = -1;
+ for (id value in values) {
+ index++;
+ if (value == NSNull.null) {
+ [transformedValues addObject:NSNull.null];
+ continue;
+ }
+
+ id transformedValue = nil;
+ if ([transformer conformsToProtocol:@protocol(MTLTransformerErrorHandling)]) {
+ NSError *underlyingError = nil;
+ transformedValue = [(id)transformer transformedValue:value success:success error:&underlyingError];
+
+ if (*success == NO) {
+ if (error != NULL) {
+ NSDictionary *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Could not transform array", @""),
+ NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"Could not transform value at index %d", @""), index],
+ NSUnderlyingErrorKey: underlyingError,
+ MTLTransformerErrorHandlingInputValueErrorKey: values
+ };
+
+ *error = [NSError errorWithDomain:MTLTransformerErrorHandlingErrorDomain code:MTLTransformerErrorHandlingErrorInvalidInput userInfo:userInfo];
+ }
+ return nil;
+ }
+ } else {
+ transformedValue = [transformer transformedValue:value];
+ }
+
+ if (transformedValue == nil) continue;
+
+ [transformedValues addObject:transformedValue];
+ }
+
+ return transformedValues;
+ };
+
+ id (^reverseBlock)(NSArray *values, BOOL *success, NSError **error) = nil;
+ if (transformer.class.allowsReverseTransformation) {
+ reverseBlock = ^ id (NSArray *values, BOOL *success, NSError **error) {
+ if (values == nil) return nil;
+
+ if (![values isKindOfClass:NSArray.class]) {
+ if (error != NULL) {
+ NSDictionary *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Could not transform non-array type", @""),
+ NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"Expected an NSArray, got: %@.", @""), values],
+ MTLTransformerErrorHandlingInputValueErrorKey: values
+ };
+
+ *error = [NSError errorWithDomain:MTLTransformerErrorHandlingErrorDomain code:MTLTransformerErrorHandlingErrorInvalidInput userInfo:userInfo];
+ }
+ *success = NO;
+ return nil;
+ }
+
+ NSMutableArray *transformedValues = [NSMutableArray arrayWithCapacity:values.count];
+ NSInteger index = -1;
+ for (id value in values) {
+ index++;
+ if (value == NSNull.null) {
+ [transformedValues addObject:NSNull.null];
- NSMutableArray *models = [NSMutableArray arrayWithCapacity:dictionaries.count];
- for (id JSONDictionary in dictionaries) {
- if (JSONDictionary == NSNull.null) {
- [models addObject:NSNull.null];
continue;
}
+
+ id transformedValue = nil;
+ if ([transformer respondsToSelector:@selector(reverseTransformedValue:success:error:)]) {
+ NSError *underlyingError = nil;
+ transformedValue = [(id)transformer reverseTransformedValue:value success:success error:&underlyingError];
+
+ if (*success == NO) {
+ if (error != NULL) {
+ NSDictionary *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Could not transform array", @""),
+ NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"Could not transform value at index %d", @""), index],
+ NSUnderlyingErrorKey: underlyingError,
+ MTLTransformerErrorHandlingInputValueErrorKey: values
+ };
+
+ *error = [NSError errorWithDomain:MTLTransformerErrorHandlingErrorDomain code:MTLTransformerErrorHandlingErrorInvalidInput userInfo:userInfo];
+ }
+ return nil;
+ }
+ } else {
+ transformedValue = [transformer reverseTransformedValue:value];
+ }
+
+ if (transformedValue == nil) continue;
+
+ [transformedValues addObject:transformedValue];
+ }
+
+ return transformedValues;
+ };
+ }
+ if (reverseBlock != nil) {
+ return [MTLValueTransformer transformerUsingForwardBlock:forwardBlock reverseBlock:reverseBlock];
+ } else {
+ return [MTLValueTransformer transformerUsingForwardBlock:forwardBlock];
+ }
+}
- NSAssert([JSONDictionary isKindOfClass:NSDictionary.class], @"Expected a dictionary or an NSNull, got: %@", JSONDictionary);
++ (NSValueTransformer *)mtl_validatingTransformerForClass:(Class)class {
+ NSParameterAssert(class != nil);
- id model = [dictionaryTransformer transformedValue:JSONDictionary];
- if (model == nil) continue;
+ return [MTLValueTransformer transformerUsingForwardBlock:^ id (id value, BOOL *success, NSError **error) {
+ if (value != nil && ![value isKindOfClass:class]) {
+ if (error != NULL) {
+ NSDictionary *userInfo = @{
+ NSLocalizedDescriptionKey: NSLocalizedString(@"Value did not match expected type", @""),
+ NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:NSLocalizedString(@"Expected %1$@ to be of class %2$@", @""), value, class],
+ MTLTransformerErrorHandlingInputValueErrorKey : value
+ };
- [models addObject:model];
+ *error = [NSError errorWithDomain:MTLTransformerErrorHandlingErrorDomain code:MTLTransformerErrorHandlingErrorInvalidInput userInfo:userInfo];
}
-
- return models;
+ *success = NO;
+ return nil;
}
- reverseBlock:^ id (NSArray *models) {
- if (models == nil) return nil;
-
- NSAssert([models isKindOfClass:NSArray.class], @"Expected an array of MTLModels, got: %@", models);
- NSMutableArray *dictionaries = [NSMutableArray arrayWithCapacity:models.count];
- for (id model in models) {
- if (model == NSNull.null) {
- [dictionaries addObject:NSNull.null];
- continue;
- }
-
- NSAssert([model isKindOfClass:MTLModel.class], @"Expected an MTLModel or an NSNull, got: %@", model);
+ return value;
+ }];
+}
- NSDictionary *dict = [dictionaryTransformer reverseTransformedValue:model];
- if (dict == nil) continue;
++ (NSValueTransformer *)mtl_valueMappingTransformerWithDictionary:(NSDictionary *)dictionary defaultValue:(id)defaultValue reverseDefaultValue:(id)reverseDefaultValue {
+ NSParameterAssert(dictionary != nil);
+ NSParameterAssert(dictionary.count == [[NSSet setWithArray:dictionary.allValues] count]);
- [dictionaries addObject:dict];
+ return [MTLValueTransformer
+ transformerUsingForwardBlock:^ id (id key, BOOL *success, NSError **error) {
+ return dictionary[key ?: NSNull.null] ?: defaultValue;
}
-
- return dictionaries;
- }];
+ reverseBlock:^ id (id value, BOOL *success, NSError **error) {
+ __block id result = nil;
+ [dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id anObject, BOOL *stop) {
+ if ([value isEqual:anObject]) {
+ result = key;
+ *stop = YES;
+ }
+ }];
+
+ return result ?: reverseDefaultValue;
+ }];
}
+ (NSValueTransformer *)mtl_valueMappingTransformerWithDictionary:(NSDictionary *)dictionary {
return [self mtl_valueMappingTransformerWithDictionary:dictionary defaultValue:nil reverseDefaultValue:nil];
}
-+ (NSValueTransformer *)mtl_valueMappingTransformerWithDictionary:(NSDictionary *)dictionary defaultValue:(id)defaultValue reverseDefaultValue:(id)reverseDefaultValue {
- NSParameterAssert(dictionary != nil);
- NSParameterAssert(dictionary.count == [[NSSet setWithArray:dictionary.allValues] count]);
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-implementations"
- return [MTLValueTransformer reversibleTransformerWithForwardBlock:^(id key) {
- return dictionary[key ?: NSNull.null] ?: defaultValue;
- } reverseBlock:^(id object) {
- __block id result = nil;
- [dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id anObject, BOOL *stop) {
- if ([object isEqual:anObject]) {
- result = key;
- *stop = YES;
- }
- }];
- return result ?: reverseDefaultValue;
- }];
++ (NSValueTransformer *)mtl_JSONDictionaryTransformerWithModelClass:(Class)modelClass {
+ return [MTLJSONAdapter dictionaryTransformerWithModelClass:modelClass];
}
++ (NSValueTransformer *)mtl_JSONArrayTransformerWithModelClass:(Class)modelClass {
+ return [MTLJSONAdapter arrayTransformerWithModelClass:modelClass];
+}
+
+#pragma clang diagnostic pop
+
@end
diff --git a/iOSStudy/Pods/Mantle/README.md b/iOSStudy/Pods/Mantle/README.md
index b3bee10..3a1c6fb 100644
--- a/iOSStudy/Pods/Mantle/README.md
+++ b/iOSStudy/Pods/Mantle/README.md
@@ -1,4 +1,4 @@
-# Mantle
+# Mantle [](https://github.com/Carthage/Carthage)
Mantle makes it easy to write a simple model layer for your Cocoa or Cocoa Touch
application.
@@ -209,6 +209,8 @@ typedef enum : NSUInteger {
return @{
@"URL": @"url",
@"HTMLURL": @"html_url",
+ @"number": @"number",
+ @"state": @"state",
@"reporterLogin": @"user.login",
@"assignee": @"assignee",
@"updatedAt": @"updated_at"
@@ -298,8 +300,7 @@ NSDictionary *JSONDictionary = [MTLJSONAdapter JSONDictionaryFromModel:user];
### `+JSONKeyPathsByPropertyKey`
The dictionary returned by this method specifies how your model object's
-properties map to the keys in the JSON representation. Properties that map to
-`NSNull` will not be present in the JSON representation, for example:
+properties map to the keys in the JSON representation, for example:
```objc
@@ -317,8 +318,8 @@ properties map to the keys in the JSON representation. Properties that map to
+ (NSDictionary *)JSONKeyPathsByPropertyKey {
return @{
- @"createdAt": @"created_at",
- @"meUser": NSNull.null
+ @"name": @"name",
+ @"createdAt": @"created_at"
};
}
@@ -337,8 +338,7 @@ properties map to the keys in the JSON representation. Properties that map to
In this example, the `XYUser` class declares four properties that Mantle
handles in different ways:
-- `name` is implicitly mapped to a key of the same name in the JSON
- representation.
+- `name` is mapped to a key of the same name in the JSON representation.
- `createdAt` is converted to its snake case equivalent.
- `meUser` is not serialized into JSON.
- `helper` is initialized exactly once after JSON deserialization.
@@ -346,6 +346,9 @@ handles in different ways:
Use `-[NSDictionary mtl_dictionaryByAddingEntriesFromDictionary:]` if your
model's superclass also implements `MTLJSONSerializing` to merge their mappings.
+If you'd like to map all properties of a Model class to themselves, you can use
+the `+[NSDictionary mtl_identityPropertyMapWithModel:]` helper method.
+
When deserializing JSON using
`+[MTLJSONAdapter modelOfClass:fromJSONDictionary:error:]`, JSON keys that don't
correspond to a property name or have an explicit mapping are ignored:
diff --git a/iOSStudy/Pods/Pods.xcodeproj/project.pbxproj b/iOSStudy/Pods/Pods.xcodeproj/project.pbxproj
index d94c134..d1054d9 100644
--- a/iOSStudy/Pods/Pods.xcodeproj/project.pbxproj
+++ b/iOSStudy/Pods/Pods.xcodeproj/project.pbxproj
@@ -10,70 +10,27 @@
46
objects
- 00184188B977DFF23A1F85C5
+ 017B14BC9F461EE2E432473F
- buildConfigurations
-
- F6CDC7E60CF17930F7262034
- 72575C4414A386B75A1236C3
-
- defaultConfigurationIsVisible
- 0
- defaultConfigurationName
- Release
- isa
- XCConfigurationList
-
- 003A31C6AADD74836B88341F
-
- attributes
-
- LastUpgradeCheck
- 0510
-
- buildConfigurationList
- EF1605A5BAD020789C0D6DCD
- compatibilityVersion
- Xcode 3.2
- developmentRegion
- English
- hasScannedForEncodings
- 0
+ includeInIndex
+ 1
isa
- PBXProject
- knownRegions
-
- en
-
- mainGroup
- 29EBF6D132B45FA490AAE8C4
- productRefGroup
- 7A9806F1FFB8C59E80CBFD08
- projectDirPath
-
- projectReferences
-
- projectRoot
-
- targets
-
- 41B60CD843C52B8457DCB0E0
- E0F50EA1905F2A7094812973
- F5AD41E8F4E3CBFFE9D0A6AD
- D6558E03D7E8E7369D57D62A
- EA053313AC9B201518E824AF
- 7FFBF073B63F5E27B5D0072F
- 6736EF81F571346B01E63AAB
- 0D2F41CC755DC941A9D3282F
- 0E44B521E203EC4F111815E4
-
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
+ name
+ NSDictionary+MTLMappingAdditions.h
+ path
+ Mantle/NSDictionary+MTLMappingAdditions.h
+ sourceTree
+ <group>
- 00768924736E895D7D503478
+ 021537B5204C0FECE2ACE390
buildConfigurations
- A25EAE9D801AB760A4747E4B
- 8A72EC2E5ADEFD1185ACE525
+ C5774AA1A8FFF8FE8C6497E3
+ D2FB14DD6996DA5416AAD4A7
defaultConfigurationIsVisible
0
@@ -82,198 +39,122 @@
isa
XCConfigurationList
- 015D98E4D31C2E29C4FB9DBA
-
- fileRef
- B2DFB8ABE3C361564605FC09
- isa
- PBXBuildFile
-
- 016D2ED5429A374F8D023442
-
- fileRef
- D405E1711A624A1719E082D2
- isa
- PBXBuildFile
-
- 019033947122D26DFF88E20C
+ 0249F3F32ECE11C31DA2A281
includeInIndex
1
isa
PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
name
- SVWebViewControllerBack.png
+ SVWebViewControllerActivity.m
path
- SVWebViewController/SVWebViewController.bundle/SVWebViewControllerBack.png
+ SVWebViewController/UIActivities/SVWebViewControllerActivity.m
sourceTree
<group>
- 02E92DC83C62401C25C8913C
+ 03161642A68CD1941BFCCA57
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- NSError+MTLModelException.m
+ SVIndefiniteAnimatedView.h
path
- Mantle/NSError+MTLModelException.m
+ SVProgressHUD/SVIndefiniteAnimatedView.h
sourceTree
<group>
- 0371BF6A0BA2FCC5D93407F8
+ 031749B0590F6DC7715C2614
- explicitFileType
- archive.ar
- includeInIndex
- 0
+ fileRef
+ 7EC2985EE432823B4911B78A
isa
- PBXFileReference
- path
- libPods-SDWebImage.a
- sourceTree
- BUILT_PRODUCTS_DIR
+ PBXBuildFile
- 0398B69338481EC817F6F6EB
+ 0338848C9C451EFDEF77531F
- explicitFileType
- archive.ar
includeInIndex
- 0
+ 1
isa
PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
+ name
+ MTLModel.h
path
- libPods-FMDB.a
+ Mantle/MTLModel.h
sourceTree
- BUILT_PRODUCTS_DIR
-
- 03FA11483C1D0F3D8E20B008
-
- fileRef
- BDD54D59F9F168C7CDC3C286
- isa
- PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
-
- 04205120B87CE3914882E1E1
-
- fileRef
- F0D0B8FA1F237AF39207A58C
- isa
- PBXBuildFile
+ <group>
- 051EC94587D0A832E9D6DEBA
+ 037956751483D4C23D81CEA0
+ includeInIndex
+ 1
isa
- PBXTargetDependency
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
name
- Pods-SVWebViewController
- target
- 0D2F41CC755DC941A9D3282F
- targetProxy
- CCD36D89B4623217A9BB4F11
+ SVWebViewControllerActivity.h
+ path
+ SVWebViewController/UIActivities/SVWebViewControllerActivity.h
+ sourceTree
+ <group>
- 055CD4E1DAF33217D19B9141
+ 038E0DFD617BDE9429BF052D
fileRef
- 52C22D274C762A81E9AEFD70
+ 27FB9860B22C4D48341CBEA3
isa
PBXBuildFile
- 057A36C64C16BAE9CBB65645
+ 03A5344E302537399735D750
includeInIndex
1
isa
PBXFileReference
name
- SVWebViewControllerActivityChrome@2x.png
+ SVWebViewControllerBack.png
path
- SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome@2x.png
+ SVWebViewController/SVWebViewController.bundle/SVWebViewControllerBack.png
sourceTree
<group>
- 060110539E4022EC7547DC8A
+ 04AF025B73F1D4D57A6F2619
- children
-
- E1AD240F7028E1A092DCBEDC
- 7B237DEB99E4A1EC780BD565
-
+ includeInIndex
+ 1
isa
- PBXGroup
+ PBXFileReference
name
- Security
+ SVWebViewControllerActivityChrome-iPad@2x.png
+ path
+ SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome-iPad@2x.png
sourceTree
<group>
- 06B18C667B34A3836288B3E6
-
- buildActionMask
- 2147483647
- files
-
- D003F4EA52D0953E6AF73AF6
-
- isa
- PBXFrameworksBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
-
- 06D77D3ADBE13269F32AE1CF
-
- buildActionMask
- 2147483647
- files
-
- AB1DEC2C8FBB36DEECEF04E0
- 8CCB2EE71B1282861778906D
- DD8F1007201AC5D9E168DE32
- ADC6D3BD671FB020D4E165E1
- 651297332C80103B10000DCA
-
- isa
- PBXHeadersBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
-
- 071305CB59F3D8E013288619
+ 04DBC1FBD91BF5F6C3311D26
- children
-
- C50CBBB3320CBFC5FA8EA34D
- 8A081DC2D78B0C22A3B1CDDE
- 6D6492CFDFC03E3EEED90937
- 225B176F2E2BC5974E8C8001
- BB46AB577CB11E2DEC496B53
- 304E5532CC66B25020968ED2
- 90692384AE86654AF740CBA0
- A110D8DB17AB6647C7795EBD
- 674480447F049BFA1C4EA514
- 4D56B1E3005FDE505FCEF6C6
- 98D565C31B4E1BA8DEC0CD71
- 778D223C43915891DECBE645
- D139BE864E7331A490A31F83
- 7A75EF39F7B6094E98E9D58F
- 11E705D1FBE2231D8B3FA30B
- 76D0502FC1D6208D9E893050
- BB9E6E4F4B05385705EB97C0
-
+ includeInIndex
+ 1
isa
- PBXGroup
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
name
- UIKit
+ SDImageCache.m
+ path
+ SDWebImage/SDImageCache.m
sourceTree
<group>
- 0BC85B368F05F28D8AC1E014
+ 0532441E1EECD858AA324EEE
includeInIndex
1
@@ -282,67 +163,68 @@
lastKnownFileType
sourcecode.c.h
name
- EXTScope.h
+ SDImageCache.h
path
- Mantle/extobjc/EXTScope.h
+ SDWebImage/SDImageCache.h
sourceTree
<group>
- 0BD156919664C48A35EEDBFE
+ 05F1FBF4E58EB8857D059DAE
fileRef
- E7926F44F6DD7675C4CAB292
+ 2458347131825864735CD1CC
isa
PBXBuildFile
- 0BD65AA041B8332119344140
+ 061F169028DE0BDB1A04F4C7
fileRef
- 0E03512149CABB1F580F757D
+ 3E70C5C923F6BBDBA2F30CD4
isa
PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
- 0C14F1A11A291CA30BCB976F
+ 06BFC4042CE34CA8CF550A8A
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- FMDB.h
+ NSData+ImageContentType.m
path
- src/fmdb/FMDB.h
+ SDWebImage/NSData+ImageContentType.m
sourceTree
<group>
- 0D2F41CC755DC941A9D3282F
+ 06EFFA518FDEBA01C2EE99EE
- buildConfigurationList
- 00768924736E895D7D503478
- buildPhases
+ fileRef
+ CD33ACF6C201881D46574802
+ isa
+ PBXBuildFile
+
+ 0747044C261D3EADCE75FB02
+
+ children
- FAFFA27183B7E1544DC2D54D
- 9165E3916BCF3741753508DC
- 06D77D3ADBE13269F32AE1CF
+ 46098DA747FC06C871433084
+ 161E62A9465A051CE58E5A0D
- buildRules
-
- dependencies
-
isa
- PBXNativeTarget
+ PBXGroup
name
- Pods-SVWebViewController
- productName
- Pods-SVWebViewController
- productReference
- 8BF1A56862208AAE73DA9531
- productType
- com.apple.product-type.library.static
+ Security
+ sourceTree
+ <group>
- 0DDB7686E187F3FC19D520AC
+ 079C8DABD90354174F62579C
explicitFileType
archive.ar
@@ -351,155 +233,759 @@
isa
PBXFileReference
path
- libPods-Mantle.a
+ libPods-SDWebImage.a
sourceTree
BUILT_PRODUCTS_DIR
- 0E03512149CABB1F580F757D
+ 08790C72DA11E17D2FBBCF0D
- includeInIndex
- 1
+ fileRef
+ CD8349A3F4BF18C038579DC6
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- name
- UIScrollView+MJExtension.h
- path
- MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJExtension.h
- sourceTree
- <group>
+ PBXBuildFile
+
+ 0A581658422105825B30893D
+
+ fileRef
+ 0532441E1EECD858AA324EEE
+ isa
+ PBXBuildFile
- 0E0B9761485C54F60690139C
+ 0ADA0BBE8F6E0CF27A17B204
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
- name
- AFHTTPRequestOperationManager.h
+ sourcecode.c.objc
path
- AFNetworking/AFHTTPRequestOperationManager.h
+ Pods-SVWebViewController-dummy.m
sourceTree
<group>
- 0E0C3DD3CC95A1B05DA0ED85
-
- fileRef
- BB9E6E4F4B05385705EB97C0
- isa
- PBXBuildFile
-
- 0E44B521E203EC4F111815E4
+ 0B5DEF3990AA31FD46C539A6
- buildConfigurationList
- 7571161F8493E257141282E2
- buildPhases
-
- 9AAAE1957C330405FAFB9600
- 8F935F9ED6A55A5476D707C4
- BDD171D88E04245FF41CFF78
-
- buildRules
-
- dependencies
-
- isa
- PBXNativeTarget
- name
- Pods-SWTableViewCell
- productName
- Pods-SWTableViewCell
- productReference
- 463D037C8D05265B93AA341F
- productType
- com.apple.product-type.library.static
-
- 0E941574580314BABC46EF00
+ baseConfigurationReference
+ 766E6FD13340EAC7CA2A74C0
+ buildSettings
+
+ ALWAYS_SEARCH_USER_PATHS
+ NO
+ COPY_PHASE_STRIP
+ NO
+ DSTROOT
+ /tmp/xcodeproj.dst
+ GCC_DYNAMIC_NO_PIC
+ NO
+ GCC_OPTIMIZATION_LEVEL
+ 0
+ GCC_PRECOMPILE_PREFIX_HEADER
+ YES
+ GCC_PREFIX_HEADER
+ Target Support Files/Pods-Shimmer/Pods-Shimmer-prefix.pch
+ GCC_PREPROCESSOR_DEFINITIONS
+
+ DEBUG=1
+ $(inherited)
+
+ GCC_SYMBOLS_PRIVATE_EXTERN
+ NO
+ INSTALL_PATH
+ $(BUILT_PRODUCTS_DIR)
+ IPHONEOS_DEPLOYMENT_TARGET
+ 7.0
+ OTHER_LDFLAGS
+
+ OTHER_LIBTOOLFLAGS
+
+ PRODUCT_NAME
+ $(TARGET_NAME)
+ PUBLIC_HEADERS_FOLDER_PATH
+ $(TARGET_NAME)
+ SDKROOT
+ iphoneos
+ SKIP_INSTALL
+ YES
+
+ isa
+ XCBuildConfiguration
+ name
+ Debug
+
+ 0C00902A01286919FC46FC9B
+
+ baseConfigurationReference
+ 37E7B477D7652800A3F341C3
+ buildSettings
+
+ ALWAYS_SEARCH_USER_PATHS
+ NO
+ COPY_PHASE_STRIP
+ YES
+ DSTROOT
+ /tmp/xcodeproj.dst
+ GCC_PRECOMPILE_PREFIX_HEADER
+ YES
+ GCC_PREFIX_HEADER
+ Target Support Files/Pods-SDWebImage/Pods-SDWebImage-prefix.pch
+ INSTALL_PATH
+ $(BUILT_PRODUCTS_DIR)
+ IPHONEOS_DEPLOYMENT_TARGET
+ 7.0
+ OTHER_CFLAGS
+
+ -DNS_BLOCK_ASSERTIONS=1
+ $(inherited)
+
+ OTHER_CPLUSPLUSFLAGS
+
+ -DNS_BLOCK_ASSERTIONS=1
+ $(inherited)
+
+ OTHER_LDFLAGS
+
+ OTHER_LIBTOOLFLAGS
+
+ PRODUCT_NAME
+ $(TARGET_NAME)
+ PUBLIC_HEADERS_FOLDER_PATH
+ $(TARGET_NAME)
+ SDKROOT
+ iphoneos
+ SKIP_INSTALL
+ YES
+ VALIDATE_PRODUCT
+ YES
+
+ isa
+ XCBuildConfiguration
+ name
+ Release
+
+ 0C2A438B42DC07E1A2B8E51B
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
+ name
+ AFNetworkActivityIndicatorManager.h
+ path
+ UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h
+ sourceTree
+ <group>
+
+ 0C5F4AA88C010FED2B677BE0
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
+ name
+ UIImageView+HighlightedWebCache.m
+ path
+ SDWebImage/UIImageView+HighlightedWebCache.m
+ sourceTree
+ <group>
+
+ 0CBA1F61EC68D9CDA478C899
+
+ buildConfigurationList
+ 70F13B6112440F37C2D167F8
+ buildPhases
+
+ 6BF3878F46EA166D96C264CA
+ 596FE4013EEEF9501024851D
+ 1691BA86D46755102259DA48
+
+ buildRules
+
+ dependencies
+
+ isa
+ PBXNativeTarget
+ name
+ Pods-SDWebImage
+ productName
+ Pods-SDWebImage
+ productReference
+ 079C8DABD90354174F62579C
+ productType
+ com.apple.product-type.library.static
+
+ 0CD662ED08D8060D2C191872
+
+ fileRef
+ 72330DDBCFF840EE908319EC
+ isa
+ PBXBuildFile
+
+ 0DFC1AE4D0619E84823A76B7
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
+ path
+ Pods-Mantle-prefix.pch
+ sourceTree
+ <group>
+
+ 0F41C1FA82ED1CE863ACA0D2
+
+ baseConfigurationReference
+ 9067AD6B1D75736FA573D6DC
+ buildSettings
+
+ ALWAYS_SEARCH_USER_PATHS
+ NO
+ COPY_PHASE_STRIP
+ NO
+ DSTROOT
+ /tmp/xcodeproj.dst
+ GCC_DYNAMIC_NO_PIC
+ NO
+ GCC_OPTIMIZATION_LEVEL
+ 0
+ GCC_PRECOMPILE_PREFIX_HEADER
+ YES
+ GCC_PREFIX_HEADER
+ Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-prefix.pch
+ GCC_PREPROCESSOR_DEFINITIONS
+
+ DEBUG=1
+ $(inherited)
+
+ GCC_SYMBOLS_PRIVATE_EXTERN
+ NO
+ INSTALL_PATH
+ $(BUILT_PRODUCTS_DIR)
+ IPHONEOS_DEPLOYMENT_TARGET
+ 7.0
+ OTHER_LDFLAGS
+
+ OTHER_LIBTOOLFLAGS
+
+ PRODUCT_NAME
+ $(TARGET_NAME)
+ PUBLIC_HEADERS_FOLDER_PATH
+ $(TARGET_NAME)
+ SDKROOT
+ iphoneos
+ SKIP_INSTALL
+ YES
+
+ isa
+ XCBuildConfiguration
+ name
+ Debug
+
+ 0FADB0BDACC612106361DF6A
+
+ baseConfigurationReference
+ 4D975F3E0C5580B245740BA7
+ buildSettings
+
+ ALWAYS_SEARCH_USER_PATHS
+ NO
+ COPY_PHASE_STRIP
+ NO
+ DSTROOT
+ /tmp/xcodeproj.dst
+ GCC_DYNAMIC_NO_PIC
+ NO
+ GCC_OPTIMIZATION_LEVEL
+ 0
+ GCC_PRECOMPILE_PREFIX_HEADER
+ YES
+ GCC_PREFIX_HEADER
+ Target Support Files/Pods-MJRefresh/Pods-MJRefresh-prefix.pch
+ GCC_PREPROCESSOR_DEFINITIONS
+
+ DEBUG=1
+ $(inherited)
+
+ GCC_SYMBOLS_PRIVATE_EXTERN
+ NO
+ INSTALL_PATH
+ $(BUILT_PRODUCTS_DIR)
+ IPHONEOS_DEPLOYMENT_TARGET
+ 7.0
+ OTHER_LDFLAGS
+
+ OTHER_LIBTOOLFLAGS
+
+ PRODUCT_NAME
+ $(TARGET_NAME)
+ PUBLIC_HEADERS_FOLDER_PATH
+ $(TARGET_NAME)
+ SDKROOT
+ iphoneos
+ SKIP_INSTALL
+ YES
+
+ isa
+ XCBuildConfiguration
+ name
+ Debug
+
+ 0FB12360D6BEA877E224ADA1
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
+ name
+ UIButton+AFNetworking.h
+ path
+ UIKit+AFNetworking/UIButton+AFNetworking.h
+ sourceTree
+ <group>
+
+ 11C73DBC7E4CD70B20E5C5F8
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
+ name
+ NSObject+MTLComparisonAdditions.h
+ path
+ Mantle/NSObject+MTLComparisonAdditions.h
+ sourceTree
+ <group>
+
+ 11DFAC007737F49E7E5B5404
+
+ fileRef
+ 7A3E48B8E1F6B8E4E43315C9
+ isa
+ PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
+
+ 1222A867D3B095E6CAD064E1
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
+ path
+ Pods-AFNetworking-dummy.m
+ sourceTree
+ <group>
+
+ 123002C87D23EABEC54428B6
+
+ buildConfigurations
+
+ 0FADB0BDACC612106361DF6A
+ FA0452B54E39A5441282340D
+
+ defaultConfigurationIsVisible
+ 0
+ defaultConfigurationName
+ Release
+ isa
+ XCConfigurationList
+
+ 12F59C763943F4966B45BFB4
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
+ name
+ UIWebView+AFNetworking.h
+ path
+ UIKit+AFNetworking/UIWebView+AFNetworking.h
+ sourceTree
+ <group>
+
+ 13E5B2F71EE5F50E7A1A8C32
+
+ fileRef
+ FD73A2A295E8C736206A0CFB
+ isa
+ PBXBuildFile
+
+ 148737F71BBDF519ADD222EE
+
+ buildConfigurations
+
+ 424231F6B17A5FA7F4C0F3B4
+ 87EF8679D2D2B77AB2C96FCE
+
+ defaultConfigurationIsVisible
+ 0
+ defaultConfigurationName
+ Release
+ isa
+ XCConfigurationList
+
+ 148F4C03C79D34F342A4BA5C
+
+ fileRef
+ AF5C6DD26F6C33671E226570
+ isa
+ PBXBuildFile
+
+ 15BB52D8A36F9448177D9DF6
+
+ fileRef
+ C9AF7C2EC59374EA95C53E40
+ isa
+ PBXBuildFile
+
+ 15C59580BF2B4473B05F415D
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
+ name
+ SDWebImageDownloader.h
+ path
+ SDWebImage/SDWebImageDownloader.h
+ sourceTree
+ <group>
+
+ 15FBF202A50ECA5AE8098F25
+
+ children
+
+ 5BF9005E499D27C097642952
+ C024D03913DF6EA5F878EFBE
+ 60A25E261550AFF0655E9701
+ D9BC1825A20D16596316B079
+ 037956751483D4C23D81CEA0
+ 0249F3F32ECE11C31DA2A281
+ 22E579B322935331734637C9
+ 7EC2985EE432823B4911B78A
+ 62A22F50D3F5248A35D55225
+ 25A0A19A077EC9E251FBD688
+ 1E2F2E969C76A68F6E12F89C
+ 5C7D9293E6B269F06D2001DA
+
+ isa
+ PBXGroup
+ name
+ SVWebViewController
+ path
+ SVWebViewController
+ sourceTree
+ <group>
+
+ 161E62A9465A051CE58E5A0D
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
+ name
+ AFSecurityPolicy.m
+ path
+ AFNetworking/AFSecurityPolicy.m
+ sourceTree
+ <group>
+
+ 1651B2D612326489C798B0CC
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
+ name
+ UIView+WebCacheOperation.h
+ path
+ SDWebImage/UIView+WebCacheOperation.h
+ sourceTree
+ <group>
+
+ 1691BA86D46755102259DA48
buildActionMask
2147483647
files
- CC2EB1431A8BBB896B00A972
+ F462B3022831473DDF26EA18
+ 0A581658422105825B30893D
+ 9381F7BB0A087C29FE037C45
+ DDF77BFDA744563444169FA8
+ F99B71AC8E9B4C2925D0F0BF
+ 87A539495A8DCAE923BEE754
+ D9AC5E5A7FD9CD228B2E0E9E
+ FEAE6DA63CEC5559503A25DA
+ A32C110D789B8BD8916FDEC8
+ 65CF839D7AAAAC698C0175E9
+ E941B207D74922475F8D6E73
+ 148F4C03C79D34F342A4BA5C
+ D644D20C4E3C77F3E6A6C450
+ 13E5B2F71EE5F50E7A1A8C32
+ 53A25457247088A54F54EA47
isa
- PBXFrameworksBuildPhase
+ PBXHeadersBuildPhase
runOnlyForDeploymentPostprocessing
0
- 0F22D9A04C4D256875AD1033
+ 1740A3C059CD9E1542403D15
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
+ name
+ MTLModel+NSCoding.h
+ path
+ Mantle/MTLModel+NSCoding.h
+ sourceTree
+ <group>
+
+ 17491E9549DFECEE0C4A69AA
+
+ children
+
+ E39092337355ABB89F457406
+ CD2CFD88AEC03BECA1A6CE00
+ F21CB8120EF2D5EE038E22B2
+ 203360E6A9E4664E6EEB92D1
+
+ isa
+ PBXGroup
+ name
+ Support Files
+ path
+ ../Target Support Files/Pods-SWTableViewCell
+ sourceTree
+ <group>
+
+ 175EC96C64ED690205508049
+
+ fileRef
+ CC488329354081651F356099
+ isa
+ PBXBuildFile
+
+ 1A142289B602EBE69D1249B4
+
+ baseConfigurationReference
+ 4D44B23CA21D5B5AF8203047
+ buildSettings
+
+ ALWAYS_SEARCH_USER_PATHS
+ NO
+ COPY_PHASE_STRIP
+ NO
+ DSTROOT
+ /tmp/xcodeproj.dst
+ GCC_DYNAMIC_NO_PIC
+ NO
+ GCC_OPTIMIZATION_LEVEL
+ 0
+ GCC_PRECOMPILE_PREFIX_HEADER
+ YES
+ GCC_PREFIX_HEADER
+ Target Support Files/Pods-Mantle/Pods-Mantle-prefix.pch
+ GCC_PREPROCESSOR_DEFINITIONS
+
+ DEBUG=1
+ $(inherited)
+
+ GCC_SYMBOLS_PRIVATE_EXTERN
+ NO
+ INSTALL_PATH
+ $(BUILT_PRODUCTS_DIR)
+ IPHONEOS_DEPLOYMENT_TARGET
+ 7.0
+ OTHER_LDFLAGS
+
+ OTHER_LIBTOOLFLAGS
+
+ PRODUCT_NAME
+ $(TARGET_NAME)
+ PUBLIC_HEADERS_FOLDER_PATH
+ $(TARGET_NAME)
+ SDKROOT
+ iphoneos
+ SKIP_INSTALL
+ YES
+
+ isa
+ XCBuildConfiguration
+ name
+ Debug
+
+ 1B05BA6213F2E3EF2E531B9A
+
+ fileRef
+ ED63151D6E956C666D9BD14F
+ isa
+ PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
+
+ 1B9EB26BF91493E21387BF73
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
+ name
+ SDWebImagePrefetcher.h
+ path
+ SDWebImage/SDWebImagePrefetcher.h
+ sourceTree
+ <group>
+
+ 1C1CFA57D7F622E23C370378
+
+ fileRef
+ 037956751483D4C23D81CEA0
+ isa
+ PBXBuildFile
+
+ 1C41B699867939A9D201C820
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ name
+ SVWebViewControllerActivitySafari@2x.png
+ path
+ SVWebViewController/UIActivities/Safari/SVWebViewControllerActivitySafari@2x.png
+ sourceTree
+ <group>
+
+ 1C5C6F263232576A4496C2BE
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- UIButton+WebCache.h
+ UIScrollView+MJRefresh.m
path
- SDWebImage/UIButton+WebCache.h
+ MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJRefresh.m
sourceTree
<group>
- 10BE1219154FDDC59F7E91E8
+ 1C9277FFE7786BDB6BFD2700
- fileRef
- AC1C5B4CE91F11AE998D64F6
+ children
+
+ 1D23F819420667DBDED3985E
+ 86EB9A08B9B6E1267BD57145
+ E05AA74B831F33187A80AFB2
+ F684B190D03659D4947FEA45
+ E89A849D5C7F06D308A3B1A9
+ F037D782B4ADF73E592EBDE5
+ 860338F0E2A28100CD8283CB
+
isa
- PBXBuildFile
+ PBXGroup
+ name
+ iOS
+ sourceTree
+ <group>
- 10D51B68691D31108009BE93
+ 1C92FEB632B8CFF036BFBDBE
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- AFHTTPRequestOperation.m
+ SDWebImageManager.h
path
- AFNetworking/AFHTTPRequestOperation.m
+ SDWebImage/SDWebImageManager.h
sourceTree
<group>
- 11292E3DE8EF40F9DCBCD526
+ 1CC1562D9491C5AA136310C3
includeInIndex
1
isa
PBXFileReference
- lastKnownFileType
- text.xcconfig
+ name
+ SVWebViewControllerBack@2x.png
path
- Pods-MJRefresh-Private.xcconfig
+ SVWebViewController/SVWebViewController.bundle/SVWebViewControllerBack@2x.png
sourceTree
<group>
- 11E705D1FBE2231D8B3FA30B
+ 1CC1A3DF4C98E3580B5C08DB
+
+ fileRef
+ 1D23F819420667DBDED3985E
+ isa
+ PBXBuildFile
+
+ 1D23F819420667DBDED3985E
- includeInIndex
- 1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ wrapper.framework
name
- UIRefreshControl+AFNetworking.m
+ CoreGraphics.framework
path
- UIKit+AFNetworking/UIRefreshControl+AFNetworking.m
+ Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/CoreGraphics.framework
sourceTree
- <group>
+ DEVELOPER_DIR
- 12371F77B302ED20D4ABE615
+ 1E2F2E969C76A68F6E12F89C
children
- EB111D63CDEEB43E08195847
+ 414A8E14A710D9A3FC373D58
+ ACB10044602E091306D20304
+ 04AF025B73F1D4D57A6F2619
+ A30E202D51051669B6D9A384
+ CD8D1F166166902627915896
+ CBF465FCFAE67B936CD7999F
+ 1C41B699867939A9D201C820
+ 03A5344E302537399735D750
+ 1CC1562D9491C5AA136310C3
+ 919F53AD7511E994A55FF852
+ 8B6ED94C6DDA6FF25C0DC284
isa
PBXGroup
@@ -508,68 +994,85 @@
sourceTree
<group>
- 12896047E29D3DF31213A494
+ 1E803AD000DE2CF76ED8A078
- fileRef
- EDA79BFF36ED8CC66472C4B4
+ buildConfigurationList
+ 148737F71BBDF519ADD222EE
+ buildPhases
+
+ 8A5EC5ADDF6D73BF84BB0439
+ E2B6D58F73771CA96B3C2820
+ 674019461553B37DDF831022
+
+ buildRules
+
+ dependencies
+
isa
- PBXBuildFile
+ PBXNativeTarget
+ name
+ Pods-SVWebViewController
+ productName
+ Pods-SVWebViewController
+ productReference
+ 7B223D387702971DA08CD4D7
+ productType
+ com.apple.product-type.library.static
- 13A1A364A5506D8A8B3CB81E
+ 1E8236F7F2D75641B9429C34
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- SVModalWebViewController.m
+ UIScrollView+MJRefresh.h
path
- SVWebViewController/SVModalWebViewController.m
+ MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJRefresh.h
sourceTree
<group>
- 142C5427A774A7FFD4A9FD58
-
- fileRef
- 225B176F2E2BC5974E8C8001
- isa
- PBXBuildFile
-
- 14C6C2B33E3B9C9DB8064CE3
+ 1E9D734431398B2A8B2E6187
fileRef
- 9F77207596AAC05C2F57FD7F
+ 86EB9A08B9B6E1267BD57145
isa
PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
- 15C57B0A0D754AA9967330DF
+ 1EE396C30D8A13447C80F3A0
+ buildActionMask
+ 2147483647
+ files
+
+ 9E016601CA43D1C5C8904B27
+ 8E22501E03EA577E214D2510
+ 175EC96C64ED690205508049
+ 95E7FC2311C4858528731495
+ 2AB74CF4139DA6C94534546B
+ 2C3DFA70707626353217C687
+ 95881FA09CB265E1553DA033
+ 748ADA32DF8501663602FE1E
+ C2DB8617DE738C880377729C
+ 4410ECC91FB8EA1E78851A6B
+ 36231F20F6D96FCF65E976E8
+ 05F1FBF4E58EB8857D059DAE
+
isa
- PBXFileReference
- lastKnownFileType
- wrapper.framework
- name
- SystemConfiguration.framework
- path
- Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/SystemConfiguration.framework
- sourceTree
- DEVELOPER_DIR
+ PBXHeadersBuildPhase
+ runOnlyForDeploymentPostprocessing
+ 0
- 160D3E2EB45E710B513005B2
+ 1EE3FDF8E269928BE3CA0FD8
fileRef
- 18779A7BA8AAD008F51F3F9D
+ 86EB9A08B9B6E1267BD57145
isa
PBXBuildFile
- 16BE2A454A10A0FFBBFDD201
+ 20251958D4B2711851B3E370
includeInIndex
1
@@ -577,12 +1080,14 @@
PBXFileReference
lastKnownFileType
sourcecode.c.objc
+ name
+ SDWebImageDownloader.m
path
- Pods-AFNetworking-dummy.m
+ SDWebImage/SDWebImageDownloader.m
sourceTree
<group>
- 1817BF46EC0C042C7D3CF340
+ 202F6DB433134889BAACCDDB
includeInIndex
1
@@ -591,24 +1096,13 @@
lastKnownFileType
sourcecode.c.objc
name
- MTLJSONAdapter.m
+ UIButton+WebCache.m
path
- Mantle/MTLJSONAdapter.m
+ SDWebImage/UIButton+WebCache.m
sourceTree
<group>
- 183B217DE3DE00FBD76C9DE5
-
- isa
- PBXTargetDependency
- name
- Pods-SDWebImage
- target
- 7FFBF073B63F5E27B5D0072F
- targetProxy
- 1A50A961A1670095B4C092C4
-
- 18779A7BA8AAD008F51F3F9D
+ 203360E6A9E4664E6EEB92D1
includeInIndex
1
@@ -616,29 +1110,79 @@
PBXFileReference
lastKnownFileType
sourcecode.c.h
- name
- FMResultSet.h
path
- src/fmdb/FMResultSet.h
+ Pods-SWTableViewCell-prefix.pch
sourceTree
<group>
- 187C3AFF7CA47A0B29C75D89
+ 205ED29E148DADEBC19D323C
- includeInIndex
- 1
+ baseConfigurationReference
+ 9C746065011B9B8E702645AE
+ buildSettings
+
+ ALWAYS_SEARCH_USER_PATHS
+ NO
+ COPY_PHASE_STRIP
+ NO
+ DSTROOT
+ /tmp/xcodeproj.dst
+ GCC_DYNAMIC_NO_PIC
+ NO
+ GCC_OPTIMIZATION_LEVEL
+ 0
+ GCC_PRECOMPILE_PREFIX_HEADER
+ YES
+ GCC_PREFIX_HEADER
+ Target Support Files/Pods-AFNetworking/Pods-AFNetworking-prefix.pch
+ GCC_PREPROCESSOR_DEFINITIONS
+
+ DEBUG=1
+ $(inherited)
+
+ GCC_SYMBOLS_PRIVATE_EXTERN
+ NO
+ INSTALL_PATH
+ $(BUILT_PRODUCTS_DIR)
+ IPHONEOS_DEPLOYMENT_TARGET
+ 7.0
+ OTHER_LDFLAGS
+
+ OTHER_LIBTOOLFLAGS
+
+ PRODUCT_NAME
+ $(TARGET_NAME)
+ PUBLIC_HEADERS_FOLDER_PATH
+ $(TARGET_NAME)
+ SDKROOT
+ iphoneos
+ SKIP_INSTALL
+ YES
+
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
+ XCBuildConfiguration
+ name
+ Debug
+
+ 2160C45955F52B060F92C6E9
+
+ children
+
+ CE3EDC27205A31036EFD90B8
+ 4D975F3E0C5580B245740BA7
+ 9643F891DE5CA3D4BB9E89D6
+ CD9137A020694A9525101FB3
+
+ isa
+ PBXGroup
name
- MJRefreshBaseView.h
+ Support Files
path
- MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshBaseView.h
+ ../Target Support Files/Pods-MJRefresh
sourceTree
<group>
- 1890A9018AFB550869401948
+ 22737EECE55204DE3B79A47E
includeInIndex
1
@@ -647,117 +1191,62 @@
lastKnownFileType
sourcecode.c.objc
name
- SDWebImageDownloader.m
+ SDWebImageDownloaderOperation.m
path
- SDWebImage/SDWebImageDownloader.m
+ SDWebImage/SDWebImageDownloaderOperation.m
sourceTree
<group>
- 1A404CF9215FA5CE825E6AE2
-
- fileRef
- 0C14F1A11A291CA30BCB976F
- isa
- PBXBuildFile
-
- 1A50A961A1670095B4C092C4
-
- containerPortal
- 003A31C6AADD74836B88341F
- isa
- PBXContainerItemProxy
- proxyType
- 1
- remoteGlobalIDString
- 7FFBF073B63F5E27B5D0072F
- remoteInfo
- Pods-SDWebImage
-
- 1AF9F27A2984FABBCD8BB35F
-
- fileRef
- 6A38B085018671A0ABB83BE1
- isa
- PBXBuildFile
-
- 1B0ECD78A6C7584001AA72BE
-
- fileRef
- 3FE2CB4E3BF724BF9DADD804
- isa
- PBXBuildFile
-
- 1BF5129F506CB75B0F1BC5FB
+ 22E579B322935331734637C9
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- wrapper.plug-in
+ sourcecode.c.h
name
- SVWebViewController.bundle
+ SVWebViewControllerActivityChrome.h
path
- SVWebViewController/SVWebViewController.bundle
+ SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome.h
sourceTree
<group>
- 1CD8DE0BC0E13E9F18B3F9A1
+ 231F0312ABE7BE7661B60810
containerPortal
- 003A31C6AADD74836B88341F
+ 81D979F3E87416F4B4516D5F
isa
PBXContainerItemProxy
proxyType
1
remoteGlobalIDString
- E0F50EA1905F2A7094812973
+ 6CE6AFC3F8CD70241EF59AB9
remoteInfo
- Pods-AFNetworking
-
- 1D5CA0F9B7FCF817B26A5DBE
-
- fileRef
- 9449B700FD78B567CDCE349E
- isa
- PBXBuildFile
+ Pods-MJRefresh
- 1D87621C8A8B06BD9D364D45
+ 23763F10AD2F1762F40E6516
children
- 752BB0BB115A89E3F4860E7E
+ 6D065165EADB62FE6ADC04D6
+ 58E581BDA91FBF5066FFCCD5
+ 6516689B190F38FDE8D21843
+ CA80C3A4D5A7270178FB5B66
+ 3DB788AB36F9B70305F82766
+ 51CF2F2FD419BD460AFE8089
+ A60FF7B612E384CD0FBBC028
isa
PBXGroup
name
- Targets Support Files
- sourceTree
- <group>
-
- 1DBA1A3F18B0BCF7E976DA37
-
- fileRef
- D139BE864E7331A490A31F83
- isa
- PBXBuildFile
-
- 1DFAEC12DD2639335AF49ACE
-
- includeInIndex
- 1
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- name
- NSArray+MTLManipulationAdditions.m
+ Pods
path
- Mantle/NSArray+MTLManipulationAdditions.m
+ Target Support Files/Pods
sourceTree
<group>
- 1F5410B3AD75104BB163C869
+ 244FECFEBCA55B4B22B48100
includeInIndex
1
@@ -765,12 +1254,14 @@
PBXFileReference
lastKnownFileType
sourcecode.c.objc
+ name
+ AFHTTPSessionManager.m
path
- Pods-dummy.m
+ AFNetworking/AFHTTPSessionManager.m
sourceTree
<group>
- 2046088381816FB1A6115AE8
+ 2458347131825864735CD1CC
includeInIndex
1
@@ -779,20 +1270,13 @@
lastKnownFileType
sourcecode.c.h
name
- AFURLRequestSerialization.h
+ UIView+MJExtension.h
path
- AFNetworking/AFURLRequestSerialization.h
+ MJRefreshExample/MJRefreshExample/MJRefresh/UIView+MJExtension.h
sourceTree
<group>
- 2170FBC10D2E8E490ECD303D
-
- fileRef
- DC50FB9ACAC3D68AE360BF5F
- isa
- PBXBuildFile
-
- 217FA4FB15D4EDE83A84233D
+ 24A3F0A31F1D0773C9C49784
includeInIndex
1
@@ -800,34 +1284,27 @@
PBXFileReference
lastKnownFileType
sourcecode.c.h
- name
- MJRefreshConst.h
path
- MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshConst.h
- sourceTree
- <group>
-
- 21E3949570212F296A98F3C3
-
- fileRef
- 1F5410B3AD75104BB163C869
- isa
- PBXBuildFile
+ Pods-SVProgressHUD-prefix.pch
+ sourceTree
+ <group>
- 221E3FF2B9CDB1D4F3615F0D
+ 253314F7D8BF0DB55988AFAA
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- text.plist.xml
+ sourcecode.c.h
+ name
+ Mantle.h
path
- Pods-acknowledgements.plist
+ Mantle/Mantle.h
sourceTree
<group>
- 222F9FE85B6C3B610407F404
+ 2567A3A1F416E5F48EE273BB
includeInIndex
1
@@ -836,13 +1313,13 @@
lastKnownFileType
sourcecode.c.objc
name
- FMResultSet.m
+ NSDictionary+MTLManipulationAdditions.m
path
- src/fmdb/FMResultSet.m
+ Mantle/NSDictionary+MTLManipulationAdditions.m
sourceTree
<group>
- 225B176F2E2BC5974E8C8001
+ 25A0A19A077EC9E251FBD688
includeInIndex
1
@@ -851,28 +1328,52 @@
lastKnownFileType
sourcecode.c.objc
name
- UIActivityIndicatorView+AFNetworking.m
+ SVWebViewControllerActivitySafari.m
path
- UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m
+ SVWebViewController/UIActivities/Safari/SVWebViewControllerActivitySafari.m
sourceTree
<group>
- 2366FECF46A2354EC3AC77D5
+ 2610D7C01A280C95688E34FA
- includeInIndex
- 1
+ children
+
+ 8C9C2943E986722994D47B81
+ C7C42E7283B016DEFAC91CF2
+ 747A95C1078F0A1823197D16
+ CC488329354081651F356099
+ 87D9BF752A70DA83F123E5E7
+ CADA31036DC6EAB82967ECA4
+ 7A0FE04DB8AACD8CD00D68CA
+ 6EC30786B89A1DAAEF831D65
+ F2DF18E782B13E13F56BD784
+ 37038513EB00C07B3A9C514E
+ 3DA0E29B98E2DCECB7129EED
+ AAC8341199D37437F70D1F22
+ 95FF2B992C0CBC462AC1C0EF
+ BD21D8D91FCD26B8FAA257D1
+ 492B1CA1D1972775DF51A6CF
+ B6D1E6F496CA960B50C331AD
+ 9E9D0D9F98C6F64688498FA0
+ AD5F16EA93C42C324A1A2854
+ 8BAFDC2A67AEA3220C90038A
+ 1E8236F7F2D75641B9429C34
+ 1C5C6F263232576A4496C2BE
+ 2458347131825864735CD1CC
+ C50B6D365BE90FDCF50B69A7
+ DA466A036868C7B919F43216
+ 2160C45955F52B060F92C6E9
+
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
+ PBXGroup
name
- NSDictionary+MTLManipulationAdditions.h
+ MJRefresh
path
- Mantle/NSDictionary+MTLManipulationAdditions.h
+ MJRefresh
sourceTree
<group>
- 2384225F66B601A470E03B2D
+ 267EA0919FE8615662F5C2BE
includeInIndex
1
@@ -880,298 +1381,157 @@
PBXFileReference
lastKnownFileType
sourcecode.c.h
- name
- NSMutableArray+SWUtilityButtons.h
path
- SWTableViewCell/PodFiles/NSMutableArray+SWUtilityButtons.h
+ Pods-SDWebImage-prefix.pch
sourceTree
<group>
- 23A7B732974BAA16EF4D4F5A
+ 27FB9860B22C4D48341CBEA3
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- MTLModel+NSCoding.m
+ NSValueTransformer+MTLInversionAdditions.h
path
- Mantle/MTLModel+NSCoding.m
+ Mantle/NSValueTransformer+MTLInversionAdditions.h
sourceTree
<group>
- 24200E9BAE5616D614E3BA14
-
- buildSettings
-
- ALWAYS_SEARCH_USER_PATHS
- NO
- CLANG_CXX_LANGUAGE_STANDARD
- gnu++0x
- CLANG_CXX_LIBRARY
- libc++
- CLANG_ENABLE_MODULES
- YES
- CLANG_ENABLE_OBJC_ARC
- YES
- CLANG_WARN_BOOL_CONVERSION
- YES
- CLANG_WARN_CONSTANT_CONVERSION
- YES
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE
- YES
- CLANG_WARN_EMPTY_BODY
- YES
- CLANG_WARN_ENUM_CONVERSION
- YES
- CLANG_WARN_INT_CONVERSION
- YES
- CLANG_WARN_OBJC_ROOT_CLASS
- YES
- COPY_PHASE_STRIP
- YES
- GCC_C_LANGUAGE_STANDARD
- gnu99
- GCC_DYNAMIC_NO_PIC
- NO
- GCC_OPTIMIZATION_LEVEL
- 0
- GCC_PREPROCESSOR_DEFINITIONS
-
- DEBUG=1
- $(inherited)
-
- GCC_SYMBOLS_PRIVATE_EXTERN
- NO
- GCC_WARN_64_TO_32_BIT_CONVERSION
- YES
- GCC_WARN_ABOUT_RETURN_TYPE
- YES
- GCC_WARN_UNDECLARED_SELECTOR
- YES
- GCC_WARN_UNINITIALIZED_AUTOS
- YES
- GCC_WARN_UNUSED_FUNCTION
- YES
- GCC_WARN_UNUSED_VARIABLE
- YES
- IPHONEOS_DEPLOYMENT_TARGET
- 7.0
- ONLY_ACTIVE_ARCH
- YES
- STRIP_INSTALLED_PRODUCT
- NO
-
- isa
- XCBuildConfiguration
- name
- Debug
-
- 245A7D5B09274802299A5413
-
- fileRef
- DC6959F6B0389433A846F09B
- isa
- PBXBuildFile
-
- 2480FD39925604EC68E2B1B1
+ 28008C3054989A0ECB72D888
children
- F7446765000306425A8653CB
- 33DC1FE29B55A083427A2983
- 3AACA1031CB453DF0B0F1B62
- 9E99E930712393BD264CF051
- B2FE89B302D990CFC2393FFB
- 4346B230A89B46E6BE901D9E
- A3516881B3D6F981B73AC538
- 6C91BBFD0AEB7230111657C4
+ 1C9277FFE7786BDB6BFD2700
isa
PBXGroup
name
- Pods
+ Frameworks
sourceTree
<group>
- 24ECE29E2A83329E77BC464B
-
- fileRef
- 716C03D21AAED4A8DD5ED96E
- isa
- PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
-
- 24EDA1E60FA28D25D59006F1
-
- fileRef
- 6D0FE93D2F53E6F9BE778A43
- isa
- PBXBuildFile
-
- 256F4A417937912F5BA0262B
-
- fileRef
- 8DC0686ECBB745003C3651C3
- isa
- PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
-
- 2579348338E55E4DD3339342
+ 28674285769FA01B14B096A7
children
- A9649B3D73F213DD8CAF3844
- E3C180F70C4829EC3E7C8741
- AD4009A3CA3371D1F8C780E5
- 7AF9843A5A131AAFDB93EA21
+ 8689A3CC3FD222309ED05ACB
+ 06BFC4042CE34CA8CF550A8A
+ 0532441E1EECD858AA324EEE
+ 04DBC1FBD91BF5F6C3311D26
+ 91AA46A6041EC1643446D46C
+ B545404BB9E4DE3AFE749CBB
+ 3D75C65180AD411A4D968C06
+ B62A0CCA6FB761F67C50FD6C
+ 15C59580BF2B4473B05F415D
+ 20251958D4B2711851B3E370
+ D15DE4AB72E69F69799EE587
+ 22737EECE55204DE3B79A47E
+ 1C92FEB632B8CFF036BFBDBE
+ 9A7E479B26D9F0FDE6B70438
+ E38AA2650B16052F84F74A50
+ 1B9EB26BF91493E21387BF73
+ 3843591682FC397B1C1ECC3F
+ FA622950AEB141300BCA6B1F
+ 202F6DB433134889BAACCDDB
+ BF004A408F3B27648FC59EC5
+ 3E70C5C923F6BBDBA2F30CD4
+ AF5C6DD26F6C33671E226570
+ 71DC522FCAFF9D6B38C8C1C8
+ C37FB122D4C23F324D71F0B7
+ 0C5F4AA88C010FED2B677BE0
+ FD73A2A295E8C736206A0CFB
+ 2BA319B679FD7E5367F430C6
+ 1651B2D612326489C798B0CC
+ BC4BFA3BB3B2500FA7071308
isa
PBXGroup
name
- Support Files
- path
- ../Target Support Files/Pods-FMDB
+ Core
sourceTree
<group>
- 25BC2970B45A7D905D5F19BB
+ 288C837B4AE7323562462C3A
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- UIScrollView+MJRefresh.m
+ NSDictionary+MTLJSONKeyPath.h
path
- MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJRefresh.m
+ Mantle/NSDictionary+MTLJSONKeyPath.h
sourceTree
<group>
- 25CE073DBCD2584B257B39DA
+ 28CA5C2956701A65270F4AD9
fileRef
- D0C3135DA2BA3C019BAF2DCF
+ 86EB9A08B9B6E1267BD57145
isa
PBXBuildFile
- 26D05A8A28DCD60C1CA8EC7E
+ 2AB74CF4139DA6C94534546B
- buildActionMask
- 2147483647
- files
-
- 749D67B382740B441A6C9985
- 04205120B87CE3914882E1E1
- F5336FA18F2792224B01F5AD
- DDCF5122548DF51242583A68
- F44EDFC44AEF1BC95DB7FA7D
-
+ fileRef
+ 6EC30786B89A1DAAEF831D65
isa
- PBXFrameworksBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
+ PBXBuildFile
- 273E8CC1B7A1DF52553B76D7
+ 2AC8126F41306857B4D7B228
- buildActionMask
- 2147483647
- files
-
- A566AAD0BC4F7B6641A8C759
- FA2858642D021A2940D97851
- F3B157F0A7C5AE48DEF99006
- 9FA315080E627AB06418F4B4
- C2F2F561C27931B0CFA6A5AD
- A0BC09B6CD44A3EC41327140
- 7C9788498CCBBD0718711B7D
- 9F9C79DFE629562CA77CD2CA
- 12896047E29D3DF31213A494
- 1D5CA0F9B7FCF817B26A5DBE
- 6EE966C6726621AA9BA61694
- 142C5427A774A7FFD4A9FD58
- 47D9D21AF5FF6276C1230478
- BE940E795DD463ACED5B538C
- 6DC5F2F2A80D898D1B9BA4E9
- 1DBA1A3F18B0BCF7E976DA37
- 79AE7927E2E34267BBB4EEFB
- 0E0C3DD3CC95A1B05DA0ED85
-
+ fileRef
+ 20251958D4B2711851B3E370
isa
- PBXSourcesBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
+ PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
- 27A001025D8F6246D8E0D8D3
+ 2B0136D8B5C9A7B320D8A50D
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
- name
- AFHTTPRequestOperation.h
+ text.xcconfig
path
- AFNetworking/AFHTTPRequestOperation.h
+ Pods-SVWebViewController-Private.xcconfig
sourceTree
<group>
- 27CC88179E549D8028BB3973
+ 2B0B2A2AC2732C870C917A82
- buildActionMask
- 2147483647
- files
-
- 8C11E60C3F243002B20ABAF7
- A3E886CEC48C491886768370
- D6D6D28D37442BAAA468A18D
- A3A92429628C08F12D3FC1CD
- 24ECE29E2A83329E77BC464B
- B5CE0321A8AEFC3F5FA0DF70
- 639C0E9A9E7ADF70C513571E
- EDCDF1F1A409A8EF63058261
- 14C6C2B33E3B9C9DB8064CE3
- 895426A01E6E4514960D5307
- F38473E10FE10739CC22000B
- 03FA11483C1D0F3D8E20B008
- 55A7772828B4EE4C2F35A0CD
- 8D934380DB6CDDF6B1F43315
- 256F4A417937912F5BA0262B
-
+ fileRef
+ D6CB1F2691B16FB9B1701C9C
isa
- PBXSourcesBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
+ PBXBuildFile
- 282B0048A3E511971931B363
+ 2B388C41DBF1EEF5D24C15BD
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- AFURLConnectionOperation.h
+ UIWebView+AFNetworking.m
path
- AFNetworking/AFURLConnectionOperation.h
+ UIKit+AFNetworking/UIWebView+AFNetworking.m
sourceTree
<group>
- 283AD6CF440DCA9B38B0B53C
+ 2BA319B679FD7E5367F430C6
includeInIndex
1
@@ -1180,13 +1540,58 @@
lastKnownFileType
sourcecode.c.objc
name
- MTLModel.m
+ UIImageView+WebCache.m
path
- Mantle/MTLModel.m
+ SDWebImage/UIImageView+WebCache.m
sourceTree
<group>
- 290221507373808ABAA4054B
+ 2C3DFA70707626353217C687
+
+ fileRef
+ 37038513EB00C07B3A9C514E
+ isa
+ PBXBuildFile
+
+ 2CC87DE56EE450C258CC1459
+
+ fileRef
+ 7A0FE04DB8AACD8CD00D68CA
+ isa
+ PBXBuildFile
+
+ 2CE2F848E4E067A038B24583
+
+ fileRef
+ E3AB4479A70BBD8BEEB85735
+ isa
+ PBXBuildFile
+
+ 2CFDDB557FAFD4668FB15C36
+
+ fileRef
+ 3843591682FC397B1C1ECC3F
+ isa
+ PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
+
+ 2DC4E99A25ACFE75B1E09DDB
+
+ fileRef
+ 2DE7C234F276794E257B6C45
+ isa
+ PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
+
+ 2DE7C234F276794E257B6C45
includeInIndex
1
@@ -1195,107 +1600,112 @@
lastKnownFileType
sourcecode.c.objc
name
- AFHTTPSessionManager.m
+ MTLTransformerErrorHandling.m
path
- AFNetworking/AFHTTPSessionManager.m
+ Mantle/MTLTransformerErrorHandling.m
sourceTree
<group>
- 292F5F1319A89AE506A962C2
+ 2EA9025C8D014A7B2C9DCB08
+ fileRef
+ 04DBC1FBD91BF5F6C3311D26
isa
- PBXFileReference
- lastKnownFileType
- wrapper.framework
- name
- CoreGraphics.framework
- path
- Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/CoreGraphics.framework
- sourceTree
- DEVELOPER_DIR
+ PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
+
+ 2F17FEC1B706F2EB39E2DA5D
+
+ fileRef
+ F2DF18E782B13E13F56BD784
+ isa
+ PBXBuildFile
- 29A714F97FEC7249C075FD1B
+ 30595C98C9115B602BDC4BCB
fileRef
- 98D565C31B4E1BA8DEC0CD71
+ 751596E07647168536D8770B
+ isa
+ PBXBuildFile
+
+ 30AA1BB118127744A694AB67
+
isa
- PBXBuildFile
+ PBXTargetDependency
+ name
+ Pods-SVProgressHUD
+ target
+ D68D040FBA01D62A8E3F21CF
+ targetProxy
+ C8F8ADAD27B79FF7562751D5
- 29C91E9A9A1FACD36088397D
+ 31002E2D5A3FBDB190E2BA39
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- text.xcconfig
+ sourcecode.c.objc
+ name
+ SWUtilityButtonTapGestureRecognizer.m
path
- Pods-SWTableViewCell-Private.xcconfig
- sourceTree
- <group>
-
- 29EBF6D132B45FA490AAE8C4
-
- children
-
- EF04ADF8DBB1227D34EBBEEA
- DD72EA41B8BD0DC998006611
- 2480FD39925604EC68E2B1B1
- 7A9806F1FFB8C59E80CBFD08
- 1D87621C8A8B06BD9D364D45
-
- isa
- PBXGroup
+ SWTableViewCell/PodFiles/SWUtilityButtonTapGestureRecognizer.m
sourceTree
<group>
- 2A7803167CE7616DAD6D45D8
+ 31571A3142EC0360BA8CE5A1
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ wrapper.plug-in
name
- FMDatabase.h
+ SVProgressHUD.bundle
path
- src/fmdb/FMDatabase.h
+ SVProgressHUD/SVProgressHUD.bundle
sourceTree
<group>
- 2C5859609EFA12DBF8041624
-
- containerPortal
- 003A31C6AADD74836B88341F
- isa
- PBXContainerItemProxy
- proxyType
- 1
- remoteGlobalIDString
- EA053313AC9B201518E824AF
- remoteInfo
- Pods-Mantle
-
- 2D3A6D4FA7D703DF6C8A7450
+ 335361E3B7EBFEF025533997
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
+ path
+ Pods-SDWebImage-dummy.m
+ sourceTree
+ <group>
+
+ 354547649D0B305705F9A7B2
+
+ children
+
+ 28674285769FA01B14B096A7
+ 5E8DB0A06DAF83A7632381C1
+
+ isa
+ PBXGroup
name
- AFURLSessionManager.h
+ SDWebImage
path
- AFNetworking/AFURLSessionManager.h
+ SDWebImage
sourceTree
<group>
- 2D77E6FB71644E503AB9ED42
+ 356BDA711A406B42A2AA21CC
fileRef
- 23A7B732974BAA16EF4D4F5A
+ 3C5E49F687C4DB8F5FCDB770
isa
PBXBuildFile
settings
@@ -1304,14 +1714,7 @@
-DOS_OBJECT_USE_OBJC=0
- 2E82A19ADA9D6FA582DFA1B8
-
- fileRef
- 5CDF5BD81D96D9F7921C8DC4
- isa
- PBXBuildFile
-
- 2F252426DE161299AE05188D
+ 35A704D283AC845C1F7D3779
includeInIndex
1
@@ -1326,390 +1729,211 @@
sourceTree
<group>
- 2FC003B95AA7F89F6830FF92
+ 36231F20F6D96FCF65E976E8
fileRef
- 32C94CBBCF8C76526F8213DA
+ 1E8236F7F2D75641B9429C34
isa
PBXBuildFile
- 304E5532CC66B25020968ED2
+ 37038513EB00C07B3A9C514E
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- UIAlertView+AFNetworking.m
+ MJRefreshGifHeader.h
path
- UIKit+AFNetworking/UIAlertView+AFNetworking.m
+ MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshGifHeader.h
sourceTree
<group>
- 30531E76C05F3BC19F4D8D31
+ 37335D22593D7576DD7BB8F3
includeInIndex
1
isa
PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
name
- SVWebViewControllerNext@2x.png
+ NSArray+MTLManipulationAdditions.h
path
- SVWebViewController/SVWebViewController.bundle/SVWebViewControllerNext@2x.png
+ Mantle/NSArray+MTLManipulationAdditions.h
sourceTree
<group>
- 30C3BD86CBED0DC2975AE9C1
-
- fileRef
- 282B0048A3E511971931B363
- isa
- PBXBuildFile
-
- 31ED12F5CEA9A23F5663038A
-
- buildConfigurations
-
- 666B1AFF5E73BE290468F5EC
- 8A8E2AEA05C87BF2E72C7FCA
-
- defaultConfigurationIsVisible
- 0
- defaultConfigurationName
- Release
- isa
- XCConfigurationList
-
- 322D65FFB3319CBE9B35DD56
+ 3775A139FB5A19BB0E215513
- children
-
- 575254127992AC3095637C85
- C8519CEEEF547AA9EE9D9271
- 928FEC03396D35D183A65963
- 8DCB4D41A489D80F71A9D029
- F19082954117D5EC4CBF111A
- E32EAF52CDE8541AAA86F6A0
- B3C85AC9AFD3294AE7C56106
- 716C03D21AAED4A8DD5ED96E
- 84E79296009B0C709F29B5C1
- 1890A9018AFB550869401948
- 60142F5566216743E153E6C3
- 9F59D37382C8481C4A3543E6
- 3C4B103B2DCE282C9C9EA571
- FD93687F5220E28F92C0D41E
- E9A68AA93E6B24526C1517E5
- 69070D1F2DAD001B977D7FCD
- 9F77207596AAC05C2F57FD7F
- 0F22D9A04C4D256875AD1033
- 7A1CB4CAA83E0FC77E12607B
- 43B8A0C73CAAAADDEBCE7C0C
- 8E7746C93B5A382A8BFB31C8
- FD317A4CDFFEF6932C841E62
- BDD54D59F9F168C7CDC3C286
- 5CDF5BD81D96D9F7921C8DC4
- 9878234455241C9D71D7D974
- E96F46F8A984911D7538CA63
- BC949D87330F6EC5E34A3352
- 35DE48B4FA6E51BD7D1BA6FC
- 8DC0686ECBB745003C3651C3
-
isa
- PBXGroup
+ PBXTargetDependency
name
- Core
- sourceTree
- <group>
+ Pods-SWTableViewCell
+ target
+ 93425A71C668EB5F6C7FA734
+ targetProxy
+ 7AB6812792AFA62E07248261
- 32C94CBBCF8C76526F8213DA
+ 3798DEA0FAA541D316F5FE1C
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
- name
- MJRefreshBaseView.m
- path
- MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshBaseView.m
- sourceTree
- <group>
-
- 3396072C759A0E898549D6E7
-
- fileRef
- 90E53DFD34C1281914AAC149
- isa
- PBXBuildFile
-
- 33DC1FE29B55A083427A2983
-
- children
-
- 2579348338E55E4DD3339342
- 3A04D5BA2926938475C2BC63
-
- isa
- PBXGroup
+ sourcecode.c.h
name
- FMDB
+ EXTScope.h
path
- FMDB
+ Mantle/extobjc/EXTScope.h
sourceTree
<group>
- 34257C1DD98D838891B765BC
+ 379FAB72597E10BB2F1FEE69
children
- 44E5FEBB52959F4FE292E75F
- 29C91E9A9A1FACD36088397D
- A2B106C048B78A5C6FBAA445
- 94AC0364478A39DA51322B7F
+ 52A314C9DA51CC9C91B55EE1
+ 9067AD6B1D75736FA573D6DC
+ 751596E07647168536D8770B
+ 24A3F0A31F1D0773C9C49784
isa
PBXGroup
name
Support Files
path
- ../Target Support Files/Pods-SWTableViewCell
+ ../Target Support Files/Pods-SVProgressHUD
sourceTree
<group>
- 34A0A9B27EF8487D6B85D039
+ 37C69F1225F365F71389C2B9
- includeInIndex
- 1
+ fileRef
+ 31002E2D5A3FBDB190E2BA39
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- name
- AFNetworkReachabilityManager.m
- path
- AFNetworking/AFNetworkReachabilityManager.m
- sourceTree
- <group>
+ PBXBuildFile
- 35DE48B4FA6E51BD7D1BA6FC
+ 37E7B477D7652800A3F341C3
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
- name
- UIView+WebCacheOperation.h
+ text.xcconfig
path
- SDWebImage/UIView+WebCacheOperation.h
+ Pods-SDWebImage-Private.xcconfig
sourceTree
<group>
- 379C4A4E6343D5622A38206E
+ 383B6E4068731C879D329EBE
fileRef
- 0F22D9A04C4D256875AD1033
+ 86EB9A08B9B6E1267BD57145
isa
PBXBuildFile
- 379D3CCD2FFBB2698E6A788E
+ 3843591682FC397B1C1ECC3F
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- metamacros.h
+ SDWebImagePrefetcher.m
path
- Mantle/extobjc/metamacros.h
+ SDWebImage/SDWebImagePrefetcher.m
sourceTree
<group>
- 37B990D486EB877EA36E8C25
-
- fileRef
- 6352CB3951039CAB104F5D32
- isa
- PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
-
- 3886D77C2964260BA24AC311
+ 38F13723B1DE2DB0C6785A56
- buildSettings
-
- ALWAYS_SEARCH_USER_PATHS
- NO
- CLANG_CXX_LANGUAGE_STANDARD
- gnu++0x
- CLANG_CXX_LIBRARY
- libc++
- CLANG_ENABLE_MODULES
- YES
- CLANG_ENABLE_OBJC_ARC
- YES
- CLANG_WARN_BOOL_CONVERSION
- YES
- CLANG_WARN_CONSTANT_CONVERSION
- YES
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE
- YES
- CLANG_WARN_EMPTY_BODY
- YES
- CLANG_WARN_ENUM_CONVERSION
- YES
- CLANG_WARN_INT_CONVERSION
- YES
- CLANG_WARN_OBJC_ROOT_CLASS
- YES
- COPY_PHASE_STRIP
- NO
- ENABLE_NS_ASSERTIONS
- NO
- GCC_C_LANGUAGE_STANDARD
- gnu99
- GCC_PREPROCESSOR_DEFINITIONS
-
- RELEASE=1
-
- GCC_WARN_64_TO_32_BIT_CONVERSION
- YES
- GCC_WARN_ABOUT_RETURN_TYPE
- YES
- GCC_WARN_UNDECLARED_SELECTOR
- YES
- GCC_WARN_UNINITIALIZED_AUTOS
- YES
- GCC_WARN_UNUSED_FUNCTION
- YES
- GCC_WARN_UNUSED_VARIABLE
- YES
- IPHONEOS_DEPLOYMENT_TARGET
- 7.0
- STRIP_INSTALLED_PRODUCT
- NO
- VALIDATE_PRODUCT
- YES
-
+ buildActionMask
+ 2147483647
+ files
+
+ 1E9D734431398B2A8B2E6187
+
isa
- XCBuildConfiguration
- name
- Release
+ PBXFrameworksBuildPhase
+ runOnlyForDeploymentPostprocessing
+ 0
- 3A04D5BA2926938475C2BC63
+ 3992094AFFDF7D4ECD978CFD
- children
+ buildActionMask
+ 2147483647
+ files
- 0C14F1A11A291CA30BCB976F
- 2A7803167CE7616DAD6D45D8
- 595FC29ACF0D8E7894A124BF
- 9E3CADF4D34242891C1E4725
- 96B82497505EF98401B50E1D
- C684423B9F0BCABE69332621
- 6352CB3951039CAB104F5D32
- DC332F6A26805C987939E79B
- FFF0E1F586F1C9698F168012
- 18779A7BA8AAD008F51F3F9D
- 222F9FE85B6C3B610407F404
+ 59AE4BAEA48D1EA20F038079
+ 633FD29B2A326506D2C73CED
+ CF29DC3C94D7344966D490D7
+ 99C6EE30C94DB596F2FCEBE2
+ D3CE7AF1CEF858F829394CC8
+ 37C69F1225F365F71389C2B9
+ 4B6C8B40B745CC012679E0AA
isa
- PBXGroup
- name
- common
- sourceTree
- <group>
+ PBXSourcesBuildPhase
+ runOnlyForDeploymentPostprocessing
+ 0
- 3A2FD88F529A99A655D5C439
+ 3A88AB895E6CE17129F0F61A
- includeInIndex
- 1
+ fileRef
+ A46D26FE67677E1BCCEC9648
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- name
- SVIndefiniteAnimatedView.m
- path
- SVProgressHUD/SVIndefiniteAnimatedView.m
- sourceTree
- <group>
+ PBXBuildFile
- 3AACA1031CB453DF0B0F1B62
+ 3A8CF03BEBB4C969DAE1A58C
- children
-
- 3D08731A2D8B7A9D2A860E1E
- 187C3AFF7CA47A0B29C75D89
- 32C94CBBCF8C76526F8213DA
- 217FA4FB15D4EDE83A84233D
- A19B2B715041A76AD22B7BB7
- C5B29E7C81D4C77334248AA5
- 3ED88041ED6DCCA7AB130669
- DC6959F6B0389433A846F09B
- D0C6BE4F0F08EEF1AD4759BF
- 0E03512149CABB1F580F757D
- DC50FB9ACAC3D68AE360BF5F
- 8ED9213EE55680C24F1EB677
- 25BC2970B45A7D905D5F19BB
- 635165301CE75B15CC16EE35
- D405E1711A624A1719E082D2
- 77D44783F9EE017394DF2D6A
- 6A082816851C55476BD99C06
-
+ fileRef
+ 492B1CA1D1972775DF51A6CF
isa
- PBXGroup
- name
- MJRefresh
- path
- MJRefresh
- sourceTree
- <group>
+ PBXBuildFile
+
+ 3AE2C49BD0132C3851A1A694
+
+ fileRef
+ 0ADA0BBE8F6E0CF27A17B204
+ isa
+ PBXBuildFile
- 3C4B103B2DCE282C9C9EA571
+ 3B05348D9EADF7A7B1CBFCAF
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- SDWebImageManager.h
+ SWUtilityButtonView.m
path
- SDWebImage/SDWebImageManager.h
+ SWTableViewCell/PodFiles/SWUtilityButtonView.m
sourceTree
<group>
- 3C55B095805681785D374172
+ 3B74DE952620ECCD576D889F
- fileRef
- D0C6BE4F0F08EEF1AD4759BF
+ buildActionMask
+ 2147483647
+ files
+
+ 86AEF979AA53AF316293C8AD
+
isa
- PBXBuildFile
-
- 3CF9B45DDE34993A3FD50533
-
- explicitFileType
- archive.ar
- includeInIndex
+ PBXFrameworksBuildPhase
+ runOnlyForDeploymentPostprocessing
0
- isa
- PBXFileReference
- path
- libPods-MJRefresh.a
- sourceTree
- BUILT_PRODUCTS_DIR
- 3D08731A2D8B7A9D2A860E1E
+ 3B7B0A7B452BFAC999ED51AF
includeInIndex
1
@@ -1718,60 +1942,50 @@
lastKnownFileType
sourcecode.c.h
name
- MJRefresh.h
+ SWLongPressGestureRecognizer.h
path
- MJRefreshExample/MJRefreshExample/MJRefresh/MJRefresh.h
+ SWTableViewCell/PodFiles/SWLongPressGestureRecognizer.h
sourceTree
<group>
- 3E47599B0E330499635F07EE
+ 3C5E49F687C4DB8F5FCDB770
- explicitFileType
- archive.ar
includeInIndex
- 0
+ 1
isa
PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
+ name
+ MTLValueTransformer.m
path
- libPods.a
+ Mantle/MTLValueTransformer.m
sourceTree
- BUILT_PRODUCTS_DIR
-
- 3E7E94589902454FD328B4FD
-
- fileRef
- 76D0502FC1D6208D9E893050
- isa
- PBXBuildFile
+ <group>
- 3ED88041ED6DCCA7AB130669
+ 3D75C65180AD411A4D968C06
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- MJRefreshFooterView.m
+ SDWebImageDecoder.h
path
- MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshFooterView.m
+ SDWebImage/SDWebImageDecoder.h
sourceTree
<group>
- 3F40BF383E1E1834C0191BD5
+ 3D7A9C8AFBDC3B1B845A8354
fileRef
- 771F20504BB303BB62A88285
+ 747A95C1078F0A1823197D16
isa
PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
- 3FE2CB4E3BF724BF9DADD804
+ 3DA0E29B98E2DCECB7129EED
includeInIndex
1
@@ -1779,123 +1993,45 @@
PBXFileReference
lastKnownFileType
sourcecode.c.objc
+ name
+ MJRefreshGifHeader.m
path
- Pods-SVProgressHUD-dummy.m
+ MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshGifHeader.m
sourceTree
<group>
- 404F813C33EA2B5B22382ED6
+ 3DB788AB36F9B70305F82766
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- text.xcconfig
- path
- Pods-AFNetworking.xcconfig
- sourceTree
- <group>
-
- 4128868F2EF04420A1F35E0D
-
- buildActionMask
- 2147483647
- files
-
- 1B0ECD78A6C7584001AA72BE
- 912AE7405EF879CF2313E84E
- 055CD4E1DAF33217D19B9141
-
- isa
- PBXSourcesBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
-
- 41B60CD843C52B8457DCB0E0
-
- buildConfigurationList
- BEC66FA7BE915660404F69F2
- buildPhases
-
- E6D38302A5F37DB5658C41BB
- F3B7C44428DC09B4933F043E
-
- buildRules
-
- dependencies
-
- 57232EF4CF27F922F799FEB8
- AD73A79FDD2F245D4F40C14B
- 75C7388F53F668992B97A813
- DCFD647287A6F3DEE53059EB
- 183B217DE3DE00FBD76C9DE5
- AADD81544137DB9F341D6ED3
- 051EC94587D0A832E9D6DEBA
- 74B2111F4657AE8313673C8E
-
- isa
- PBXNativeTarget
- name
- Pods
- productName
- Pods
- productReference
- 3E47599B0E330499635F07EE
- productType
- com.apple.product-type.library.static
-
- 4346B230A89B46E6BE901D9E
-
- children
-
- 9FB2FE90C5104F065B94608B
- 3A2FD88F529A99A655D5C439
- 47ED5B3E2E498FA972A1AC3B
- 52C22D274C762A81E9AEFD70
- 12371F77B302ED20D4ABE615
- F85DB5D3718ADE63303C06E7
-
- isa
- PBXGroup
- name
- SVProgressHUD
+ text.script.sh
path
- SVProgressHUD
+ Pods-resources.sh
sourceTree
<group>
- 436DFB9BEE3EAF06EAB25B0A
-
- fileRef
- 1DFAEC12DD2639335AF49ACE
- isa
- PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
-
- 43B8A0C73CAAAADDEBCE7C0C
+ 3E70C5C923F6BBDBA2F30CD4
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- UIImage+GIF.h
+ UIImage+GIF.m
path
- SDWebImage/UIImage+GIF.h
+ SDWebImage/UIImage+GIF.m
sourceTree
<group>
- 4404E8E40C694424BA0B2EA2
+ 407F2DBBB74D2FF06D5771AC
fileRef
- 514D95EC1DE6E7F84DFD7077
+ E841AAF06ED6A0CAC0CC05ED
isa
PBXBuildFile
settings
@@ -1904,30 +2040,43 @@
-DOS_OBJECT_USE_OBJC=0
- 447B33241D6E8376ACAC2270
+ 40FBFAB85410F664A548F0A9
- fileRef
- 2046088381816FB1A6115AE8
+ children
+
+ 7388FE0012D1A4E22D1610D3
+ DA2341FB44DCAD22E128F6E1
+ 968359B7EB1738752C894204
+ 3798DEA0FAA541D316F5FE1C
+ A46A12A72CF0AD1763E44FB6
+ 73B5C770199A3692724BB0F2
+
isa
- PBXBuildFile
+ PBXGroup
+ name
+ extobjc
+ sourceTree
+ <group>
- 44E5FEBB52959F4FE292E75F
+ 414A8E14A710D9A3FC373D58
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- text.xcconfig
+ wrapper.plug-in
+ name
+ SVWebViewController.bundle
path
- Pods-SWTableViewCell.xcconfig
+ SVWebViewController/SVWebViewController.bundle
sourceTree
<group>
- 4510BD0D82B5FD8633E82F6C
+ 420247AC48DD4BCDF5E6B7D7
fileRef
- 61E1D6F569824AE60EC953DC
+ 0C5F4AA88C010FED2B677BE0
isa
PBXBuildFile
settings
@@ -1936,50 +2085,10 @@
-DOS_OBJECT_USE_OBJC=0
- 4639EC1DFC9BDEE03FCECD28
-
- fileRef
- FD317A4CDFFEF6932C841E62
- isa
- PBXBuildFile
-
- 463D037C8D05265B93AA341F
-
- explicitFileType
- archive.ar
- includeInIndex
- 0
- isa
- PBXFileReference
- path
- libPods-SWTableViewCell.a
- sourceTree
- BUILT_PRODUCTS_DIR
-
- 46F1E537458316428EEE009F
-
- fileRef
- C834791111C32E19511470D4
- isa
- PBXBuildFile
-
- 475828FB9C2F29954582B1E4
-
- includeInIndex
- 1
- isa
- PBXFileReference
- name
- SVWebViewControllerNext.png
- path
- SVWebViewController/SVWebViewController.bundle/SVWebViewControllerNext.png
- sourceTree
- <group>
-
- 47BC372C33FCDDB0603FF870
+ 424231F6B17A5FA7F4C0F3B4
baseConfigurationReference
- 11292E3DE8EF40F9DCBCD526
+ 2B0136D8B5C9A7B320D8A50D
buildSettings
ALWAYS_SEARCH_USER_PATHS
@@ -1995,7 +2104,7 @@
GCC_PRECOMPILE_PREFIX_HEADER
YES
GCC_PREFIX_HEADER
- Target Support Files/Pods-MJRefresh/Pods-MJRefresh-prefix.pch
+ Target Support Files/Pods-SVWebViewController/Pods-SVWebViewController-prefix.pch
GCC_PREPROCESSOR_DEFINITIONS
DEBUG=1
@@ -2025,71 +2134,77 @@
name
Debug
- 47C11AD21FEAD8A5CAA86FC0
+ 4410ECC91FB8EA1E78851A6B
- explicitFileType
- archive.ar
- includeInIndex
- 0
+ fileRef
+ AD5F16EA93C42C324A1A2854
isa
- PBXFileReference
- path
- libPods-AFNetworking.a
- sourceTree
- BUILT_PRODUCTS_DIR
+ PBXBuildFile
- 47D9D21AF5FF6276C1230478
+ 4418C6B2F2D85DBBEE36DBA8
fileRef
- 304E5532CC66B25020968ED2
+ 2567A3A1F416E5F48EE273BB
isa
PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
- 47ED5B3E2E498FA972A1AC3B
+ 4436096DFAA117FC404F08AE
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- SVProgressHUD.h
+ FBShimmeringLayer.m
path
- SVProgressHUD/SVProgressHUD.h
+ FBShimmering/FBShimmeringLayer.m
sourceTree
<group>
- 48558FEAC015CC0EFC37FD0A
+ 445F7BBCE78291EE57C4F84D
+
+ fileRef
+ F615D1D36012176EAC77C67D
+ isa
+ PBXBuildFile
+
+ 46098DA747FC06C871433084
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- SVWebViewControllerActivity.m
+ AFSecurityPolicy.h
path
- SVWebViewController/UIActivities/SVWebViewControllerActivity.m
+ AFNetworking/AFSecurityPolicy.h
sourceTree
<group>
- 49C2583DD5BC008CD83F6071
+ 46A720A0E12B13557BBA7BA3
fileRef
- C50CBBB3320CBFC5FA8EA34D
+ 4436096DFAA117FC404F08AE
isa
PBXBuildFile
- 4AC5FA018B13C92FA6D66B86
+ 4714840E94F4B9196E39555D
fileRef
- 983F9AB5B982D654799AA2AC
+ C3DEEAC6027984E1CCDE0A79
isa
PBXBuildFile
- 4D56B1E3005FDE505FCEF6C6
+ 4714BA30C5BDCD069A68421B
includeInIndex
1
@@ -2098,41 +2213,77 @@
lastKnownFileType
sourcecode.c.objc
name
- UIImageView+AFNetworking.m
+ SVIndefiniteAnimatedView.m
path
- UIKit+AFNetworking/UIImageView+AFNetworking.m
+ SVProgressHUD/SVIndefiniteAnimatedView.m
sourceTree
<group>
- 514D95EC1DE6E7F84DFD7077
+ 4850BE745D5CA828C6557D72
- includeInIndex
- 1
+ fileRef
+ 253314F7D8BF0DB55988AFAA
+ isa
+ PBXBuildFile
+
+ 4877370E028EB1D55797780F
+
+ baseConfigurationReference
+ CD2CFD88AEC03BECA1A6CE00
+ buildSettings
+
+ ALWAYS_SEARCH_USER_PATHS
+ NO
+ COPY_PHASE_STRIP
+ YES
+ DSTROOT
+ /tmp/xcodeproj.dst
+ GCC_PRECOMPILE_PREFIX_HEADER
+ YES
+ GCC_PREFIX_HEADER
+ Target Support Files/Pods-SWTableViewCell/Pods-SWTableViewCell-prefix.pch
+ INSTALL_PATH
+ $(BUILT_PRODUCTS_DIR)
+ IPHONEOS_DEPLOYMENT_TARGET
+ 7.0
+ OTHER_CFLAGS
+
+ -DNS_BLOCK_ASSERTIONS=1
+ $(inherited)
+
+ OTHER_CPLUSPLUSFLAGS
+
+ -DNS_BLOCK_ASSERTIONS=1
+ $(inherited)
+
+ OTHER_LDFLAGS
+
+ OTHER_LIBTOOLFLAGS
+
+ PRODUCT_NAME
+ $(TARGET_NAME)
+ PUBLIC_HEADERS_FOLDER_PATH
+ $(TARGET_NAME)
+ SDKROOT
+ iphoneos
+ SKIP_INSTALL
+ YES
+ VALIDATE_PRODUCT
+ YES
+
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
+ XCBuildConfiguration
name
- EXTRuntimeExtensions.m
- path
- Mantle/extobjc/EXTRuntimeExtensions.m
- sourceTree
- <group>
+ Release
- 5161C757881F6F6873559967
+ 48A921C553D24CB2062EEA3F
- includeInIndex
- 1
+ fileRef
+ B113FB03415126F4B88F2139
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- path
- Pods-SVProgressHUD-prefix.pch
- sourceTree
- <group>
+ PBXBuildFile
- 52C22D274C762A81E9AEFD70
+ 492B1CA1D1972775DF51A6CF
includeInIndex
1
@@ -2141,139 +2292,147 @@
lastKnownFileType
sourcecode.c.objc
name
- SVProgressHUD.m
+ MJRefreshLegendFooter.m
path
- SVProgressHUD/SVProgressHUD.m
+ MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshLegendFooter.m
sourceTree
<group>
- 52D9636A49CE4EAB4B056599
+ 4B3F73195C2488852EA8F7FA
- includeInIndex
- 1
+ buildConfigurationList
+ CDE387D2836914F846D77F58
+ buildPhases
+
+ E68153ED11688501908927F4
+ 866C612F677726DBC6F9B9D0
+
+ buildRules
+
+ dependencies
+
+ C847355BA3DEBAACBBE7DEAD
+ D57B5B10F635C06744DD1C8C
+ AB575AA86CF058702BDADE33
+ 5D33BED88C7C8B56D97308AD
+ 30AA1BB118127744A694AB67
+ EE34B75B8433DF4D70F5200D
+ 3775A139FB5A19BB0E215513
+ EB2A2DDC51A4FD1EBBF8BA79
+
isa
- PBXFileReference
+ PBXNativeTarget
name
- SVWebViewControllerActivitySafari@2x.png
- path
- SVWebViewController/UIActivities/Safari/SVWebViewControllerActivitySafari@2x.png
- sourceTree
- <group>
+ Pods
+ productName
+ Pods
+ productReference
+ CFDFBCB4455A036E8112FA54
+ productType
+ com.apple.product-type.library.static
- 531197FDF80BC84527CCAF02
+ 4B6C8B40B745CC012679E0AA
fileRef
- F0D0B8FA1F237AF39207A58C
+ 3B05348D9EADF7A7B1CBFCAF
isa
PBXBuildFile
- 532E5B4150ED4F50E11BF0C7
+ 4B8BFDE18D1FCA43E9E5BB32
- includeInIndex
- 1
+ children
+
+ 23763F10AD2F1762F40E6516
+
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
+ PBXGroup
name
- MTLModel+NSCoding.h
- path
- Mantle/MTLModel+NSCoding.h
+ Targets Support Files
sourceTree
<group>
- 53C5A15AD63D3476D0CF1531
-
- fileRef
- F0D0B8FA1F237AF39207A58C
- isa
- PBXBuildFile
-
- 5453F743BF1ED5091106B499
+ 4B945F8809DF8BB4D9F9E925
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
- name
- MTLManagedObjectAdapter.h
+ text.xcconfig
path
- Mantle/MTLManagedObjectAdapter.h
+ Pods-Mantle.xcconfig
sourceTree
<group>
- 54AF66B17C0AEFF7AE1E5828
+ 4C37BA56B960303B4E376BC6
children
- 27A001025D8F6246D8E0D8D3
- 10D51B68691D31108009BE93
- 0E0B9761485C54F60690139C
- 63B65631DCD63B55E53DCE03
- 282B0048A3E511971931B363
- BD7A57AABDA83E720552763E
+ 4B945F8809DF8BB4D9F9E925
+ 4D44B23CA21D5B5AF8203047
+ F615D1D36012176EAC77C67D
+ 0DFC1AE4D0619E84823A76B7
isa
PBXGroup
name
- NSURLConnection
+ Support Files
+ path
+ ../Target Support Files/Pods-Mantle
sourceTree
<group>
- 55A7772828B4EE4C2F35A0CD
-
- fileRef
- 9878234455241C9D71D7D974
- isa
- PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
-
- 57232EF4CF27F922F799FEB8
+ 4C74FDC86EA41CE2920EF95B
+ children
+
+ 701F96ACC76C74D7DBFE587B
+ 9DE5B8BAF6520E75E0ECD2A3
+ 649B019D2E9C917DF8824AFF
+ 998AB0CB323A17E35BDC295B
+ 0747044C261D3EADCE75FB02
+ 6DA4BD4EE3CC4E837EA25655
+ 516D4AB2E0380F4BDA49464A
+ DEA466424653E70B8209013D
+
isa
- PBXTargetDependency
+ PBXGroup
name
- Pods-AFNetworking
- target
- E0F50EA1905F2A7094812973
- targetProxy
- 1CD8DE0BC0E13E9F18B3F9A1
+ AFNetworking
+ path
+ AFNetworking
+ sourceTree
+ <group>
- 5737FC94B9492B6E6C616163
+ 4C8B4F9E0751276ACBFFACEA
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- text
+ sourcecode.c.objc
+ name
+ NSDictionary+MTLMappingAdditions.m
path
- Pods-acknowledgements.markdown
+ Mantle/NSDictionary+MTLMappingAdditions.m
sourceTree
<group>
- 573C8CC99C8641490B222C89
+ 4D44B23CA21D5B5AF8203047
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
- name
- MTLValueTransformer.m
+ text.xcconfig
path
- Mantle/MTLValueTransformer.m
+ Pods-Mantle-Private.xcconfig
sourceTree
<group>
- 575254127992AC3095637C85
+ 4D6BEC56F9F00A366232143C
includeInIndex
1
@@ -2282,26 +2441,33 @@
lastKnownFileType
sourcecode.c.h
name
- NSData+ImageContentType.h
+ FBShimmering.h
path
- SDWebImage/NSData+ImageContentType.h
+ FBShimmering/FBShimmering.h
sourceTree
<group>
- 57FA31C7342E4A8693201F60
+ 4D6DEC0914D9319015537959
+
+ fileRef
+ 1C5C6F263232576A4496C2BE
+ isa
+ PBXBuildFile
+
+ 4D975F3E0C5580B245740BA7
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ text.xcconfig
path
- Pods-MJRefresh-dummy.m
+ Pods-MJRefresh-Private.xcconfig
sourceTree
<group>
- 585F33F75FFBDB5A2D635BC5
+ 4DBE1DE7D270830D3052319C
includeInIndex
1
@@ -2310,26 +2476,52 @@
lastKnownFileType
text.xcconfig
path
- Pods-AFNetworking-Private.xcconfig
+ Pods-AFNetworking.xcconfig
sourceTree
<group>
- 58D5E10B6F509A4D289AC17C
+ 4E764B30FFA33E665E98C3E6
+
+ fileRef
+ 5534E358144AA17472034E87
+ isa
+ PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
+
+ 4F36D1CA09DF80E6C8E69420
+
+ fileRef
+ B27A22B747AB549ED4F93034
+ isa
+ PBXBuildFile
+
+ 509DA73C428A64C02BF0B75C
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- SWUtilityButtonView.h
+ AFNetworkActivityIndicatorManager.m
path
- SWTableViewCell/PodFiles/SWUtilityButtonView.h
+ UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m
sourceTree
<group>
- 595FC29ACF0D8E7894A124BF
+ 514C0D413A4720963B1FE848
+
+ fileRef
+ 70056B349FEB6A757345F167
+ isa
+ PBXBuildFile
+
+ 516C932F9D2EA6FCFA72DA5C
includeInIndex
1
@@ -2338,444 +2530,313 @@
lastKnownFileType
sourcecode.c.objc
name
- FMDatabase.m
+ AFURLConnectionOperation.m
path
- src/fmdb/FMDatabase.m
+ AFNetworking/AFURLConnectionOperation.m
sourceTree
<group>
- 59C305ABE1A25B9CB62E5D80
-
- buildActionMask
- 2147483647
- files
-
- 7B339A4AB2229806F0376DB7
- BE9EDA04D687D70B682E1E0C
- 69F567464F319FC63F2636E9
- 49C2583DD5BC008CD83F6071
- F02AEA09DBE0E12AF360F35D
- 89DFAC3443DB77191DF2822E
- C3A33DB3AF5947A220C22474
- 30C3BD86CBED0DC2975AE9C1
- 447B33241D6E8376ACAC2270
- D88A7258E9903DD9091947B3
- DB5A704B96D04FBF9549DA3B
- FB392C3A7B8813F8724C2732
- EB394718051F19102CEA333B
- 7CD1296E64395F26B193A132
- 8F938B6A800B85ACF6903654
- 29A714F97FEC7249C075FD1B
- 615507F606D311E239F28363
- F78D23F252315D98B9BE3FA6
- 3E7E94589902454FD328B4FD
-
- isa
- PBXHeadersBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
-
- 59DD36BD9A4D804D5A701ED2
+ 516D4AB2E0380F4BDA49464A
- buildActionMask
- 2147483647
- files
+ children
- 1A404CF9215FA5CE825E6AE2
- 7DA715BA2498F3CB799A4431
- C885E60E6C8BD0A926570AF5
- 892235EA9B366AF2D9486607
- E4F17FDA9A2004644DE362D1
- 160D3E2EB45E710B513005B2
+ 4DBE1DE7D270830D3052319C
+ 9C746065011B9B8E702645AE
+ 1222A867D3B095E6CAD064E1
+ 72EEDBD82F41D41F16FF3C11
isa
- PBXHeadersBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
+ PBXGroup
+ name
+ Support Files
+ path
+ ../Target Support Files/Pods-AFNetworking
+ sourceTree
+ <group>
- 5A89A95B50754A00C6F8883D
+ 51AFD4B392A31A2289544A18
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- text.xcconfig
+ sourcecode.c.objc
+ name
+ NSDictionary+MTLJSONKeyPath.m
path
- Pods-SVWebViewController.xcconfig
+ Mantle/NSDictionary+MTLJSONKeyPath.m
sourceTree
<group>
- 5C59B57AC630CD73AB5E2D1E
-
- fileRef
- 35DE48B4FA6E51BD7D1BA6FC
- isa
- PBXBuildFile
-
- 5CDF5BD81D96D9F7921C8DC4
+ 51CF2F2FD419BD460AFE8089
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
- name
- UIImageView+HighlightedWebCache.h
+ text.xcconfig
path
- SDWebImage/UIImageView+HighlightedWebCache.h
+ Pods.debug.xcconfig
sourceTree
<group>
- 5CEA9DDB4661A6FC3DC94DC6
-
- containerPortal
- 003A31C6AADD74836B88341F
- isa
- PBXContainerItemProxy
- proxyType
- 1
- remoteGlobalIDString
- 6736EF81F571346B01E63AAB
- remoteInfo
- Pods-SVProgressHUD
-
- 5DF09EA3510F7C19B9A4DA3C
+ 51DD446E599BC1395844D43C
fileRef
- 187C3AFF7CA47A0B29C75D89
+ FB68A1B10C381EEFC0E105CA
isa
PBXBuildFile
- 60142F5566216743E153E6C3
+ 52216402BFA370AED72D91F1
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
- name
- SDWebImageDownloaderOperation.h
+ text.xcconfig
path
- SDWebImage/SDWebImageDownloaderOperation.h
+ Pods-Shimmer.xcconfig
sourceTree
<group>
- 613007691409B9A6751D3737
-
- fileRef
- AD4009A3CA3371D1F8C780E5
- isa
- PBXBuildFile
-
- 615507F606D311E239F28363
+ 525D311A9E6AFF1322548C37
fileRef
- 778D223C43915891DECBE645
+ 92549F33A3CC9D6F1C3DF977
isa
PBXBuildFile
- 61E1D6F569824AE60EC953DC
+ 52A314C9DA51CC9C91B55EE1
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
- name
- MTLManagedObjectAdapter.m
+ text.xcconfig
path
- Mantle/MTLManagedObjectAdapter.m
+ Pods-SVProgressHUD.xcconfig
sourceTree
<group>
- 62417097E44F7D3F8139F32F
+ 536892A184C34EDCDF63E390
- baseConfigurationReference
- A1B208310F6C031CA9568682
- buildSettings
-
- ALWAYS_SEARCH_USER_PATHS
- NO
- COPY_PHASE_STRIP
- NO
- DSTROOT
- /tmp/xcodeproj.dst
- GCC_DYNAMIC_NO_PIC
- NO
- GCC_OPTIMIZATION_LEVEL
- 0
- GCC_PRECOMPILE_PREFIX_HEADER
- YES
- GCC_PREFIX_HEADER
- Target Support Files/Pods-SDWebImage/Pods-SDWebImage-prefix.pch
- GCC_PREPROCESSOR_DEFINITIONS
-
- DEBUG=1
- $(inherited)
-
- GCC_SYMBOLS_PRIVATE_EXTERN
- NO
- INSTALL_PATH
- $(BUILT_PRODUCTS_DIR)
- IPHONEOS_DEPLOYMENT_TARGET
- 7.0
- OTHER_LDFLAGS
-
- OTHER_LIBTOOLFLAGS
-
- PRODUCT_NAME
- $(TARGET_NAME)
- PUBLIC_HEADERS_FOLDER_PATH
- $(TARGET_NAME)
- SDKROOT
- iphoneos
- SKIP_INSTALL
- YES
-
+ fileRef
+ 2B388C41DBF1EEF5D24C15BD
isa
- XCBuildConfiguration
- name
- Debug
+ PBXBuildFile
- 62A6847E2C4950BA9C5A8A73
+ 53A25457247088A54F54EA47
fileRef
- 02E92DC83C62401C25C8913C
+ 1651B2D612326489C798B0CC
+ isa
+ PBXBuildFile
+
+ 53A7BA974083ADCCB4248257
+
+ fileRef
+ 5BF9005E499D27C097642952
isa
PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
- 633433250CA4F0951A356573
+ 53CF4E2FFFD543ABD0F1621C
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- EXTKeyPathCoding.h
+ AFHTTPRequestOperationManager.m
path
- Mantle/extobjc/EXTKeyPathCoding.h
+ AFNetworking/AFHTTPRequestOperationManager.m
sourceTree
<group>
- 635165301CE75B15CC16EE35
+ 5521BE44945832991316CDC3
+
+ fileRef
+ 46098DA747FC06C871433084
+ isa
+ PBXBuildFile
+
+ 5534E358144AA17472034E87
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- UIView+MJExtension.h
+ NSArray+MTLManipulationAdditions.m
path
- MJRefreshExample/MJRefreshExample/MJRefresh/UIView+MJExtension.h
+ Mantle/NSArray+MTLManipulationAdditions.m
sourceTree
<group>
- 6352CB3951039CAB104F5D32
+ 56F5234FA9A1B6FF50B9D373
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- FMDatabasePool.m
+ SWCellScrollView.h
path
- src/fmdb/FMDatabasePool.m
+ SWTableViewCell/PodFiles/SWCellScrollView.h
sourceTree
<group>
- 639C0E9A9E7ADF70C513571E
+ 577435415A323B682400D54D
+
+ buildConfigurationList
+ D7989D1C30764BC7F9C80624
+ buildPhases
+
+ 9793FB0E42D61D8B1B043E9E
+ 38F13723B1DE2DB0C6785A56
+ FB8D9C35B856FEED38800CB1
+
+ buildRules
+
+ dependencies
+
+ isa
+ PBXNativeTarget
+ name
+ Pods-Mantle
+ productName
+ Pods-Mantle
+ productReference
+ 9CEFCB11A62BDBC8D6BA730C
+ productType
+ com.apple.product-type.library.static
+
+ 57B4B477E70A079BAB1DAD37
fileRef
- 9F59D37382C8481C4A3543E6
+ C024D03913DF6EA5F878EFBE
isa
PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
- 63B65631DCD63B55E53DCE03
+ 58024541C4A799EB0EBD4A64
+
+ children
+
+ 03161642A68CD1941BFCCA57
+ 4714BA30C5BDCD069A68421B
+ 8887F965AE8E56F4A4FE710A
+ D1404AB4AA7E3E03EECDBA21
+ 7E75A1D26B56E04FE835CF83
+ 379FAB72597E10BB2F1FEE69
+
+ isa
+ PBXGroup
+ name
+ SVProgressHUD
+ path
+ SVProgressHUD
+ sourceTree
+ <group>
+
+ 5824DF828B372575804DB4F5
+
+ buildConfigurations
+
+ 0B5DEF3990AA31FD46C539A6
+ A5DC01003F4419E2230FF9A9
+
+ defaultConfigurationIsVisible
+ 0
+ defaultConfigurationName
+ Release
+ isa
+ XCConfigurationList
+
+ 58E581BDA91FBF5066FFCCD5
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
- name
- AFHTTPRequestOperationManager.m
+ text.plist.xml
path
- AFNetworking/AFHTTPRequestOperationManager.m
+ Pods-acknowledgements.plist
sourceTree
<group>
- 640D32B00E7CA013FAA9F891
+ 596FE4013EEEF9501024851D
- fileRef
- 2384225F66B601A470E03B2D
+ buildActionMask
+ 2147483647
+ files
+
+ FAA80B71B5EAE806B91F3C3A
+ 63CD09D5E84ABDF378BDE9CA
+
isa
- PBXBuildFile
+ PBXFrameworksBuildPhase
+ runOnlyForDeploymentPostprocessing
+ 0
- 651297332C80103B10000DCA
+ 59AE4BAEA48D1EA20F038079
fileRef
- BD9CA4ED0FDE48B5335FA601
+ D21098B980D4B99BBE4EBCB0
isa
PBXBuildFile
- 65D19C9FCE68CD267930EF33
+ 59C0FED9BB0FB19B319543E7
fileRef
- E9A68AA93E6B24526C1517E5
+ 7CFB13291239474A4401636E
isa
PBXBuildFile
- 662A98C63D4A25AEDD5B5EC8
+ 59CCB50AEA5DFB9086E74FAE
fileRef
- 69070D1F2DAD001B977D7FCD
+ 37335D22593D7576DD7BB8F3
isa
PBXBuildFile
- 662F6BC68D35264D3A2E14DF
+ 59D7C7EEA8FE7A18F7242FAB
- baseConfigurationReference
- E0E9DDEE088E41C8CF4C003D
- buildSettings
-
- ALWAYS_SEARCH_USER_PATHS
- NO
- COPY_PHASE_STRIP
- YES
- DSTROOT
- /tmp/xcodeproj.dst
- GCC_PRECOMPILE_PREFIX_HEADER
- YES
- INSTALL_PATH
- $(BUILT_PRODUCTS_DIR)
- IPHONEOS_DEPLOYMENT_TARGET
- 7.0
- OTHER_CFLAGS
-
- -DNS_BLOCK_ASSERTIONS=1
- $(inherited)
-
- OTHER_CPLUSPLUSFLAGS
-
- -DNS_BLOCK_ASSERTIONS=1
- $(inherited)
-
- OTHER_LDFLAGS
-
- OTHER_LIBTOOLFLAGS
-
- PRODUCT_NAME
- $(TARGET_NAME)
- PUBLIC_HEADERS_FOLDER_PATH
- $(TARGET_NAME)
- SDKROOT
- iphoneos
- SKIP_INSTALL
- YES
- VALIDATE_PRODUCT
- YES
-
+ includeInIndex
+ 1
isa
- XCBuildConfiguration
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
name
- Release
+ AFURLResponseSerialization.h
+ path
+ AFNetworking/AFURLResponseSerialization.h
+ sourceTree
+ <group>
- 666B1AFF5E73BE290468F5EC
+ 5B2761C05AC940A3B44CABDD
- baseConfigurationReference
- B9F5BA86ACFC81B344D15D30
- buildSettings
+ fileRef
+ 22737EECE55204DE3B79A47E
+ isa
+ PBXBuildFile
+ settings
- ALWAYS_SEARCH_USER_PATHS
- NO
- COPY_PHASE_STRIP
- NO
- DSTROOT
- /tmp/xcodeproj.dst
- GCC_DYNAMIC_NO_PIC
- NO
- GCC_OPTIMIZATION_LEVEL
- 0
- GCC_PRECOMPILE_PREFIX_HEADER
- YES
- GCC_PREFIX_HEADER
- Target Support Files/Pods-Mantle/Pods-Mantle-prefix.pch
- GCC_PREPROCESSOR_DEFINITIONS
-
- DEBUG=1
- $(inherited)
-
- GCC_SYMBOLS_PRIVATE_EXTERN
- NO
- INSTALL_PATH
- $(BUILT_PRODUCTS_DIR)
- IPHONEOS_DEPLOYMENT_TARGET
- 7.0
- OTHER_LDFLAGS
-
- OTHER_LIBTOOLFLAGS
-
- PRODUCT_NAME
- $(TARGET_NAME)
- PUBLIC_HEADERS_FOLDER_PATH
- $(TARGET_NAME)
- SDKROOT
- iphoneos
- SKIP_INSTALL
- YES
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
- isa
- XCBuildConfiguration
- name
- Debug
-
- 6736EF81F571346B01E63AAB
-
- buildConfigurationList
- 00184188B977DFF23A1F85C5
- buildPhases
-
- 4128868F2EF04420A1F35E0D
- 7371E4E66A36022278C4AA90
- 73926FAB26BEDB4523776F71
-
- buildRules
-
- dependencies
-
- isa
- PBXNativeTarget
- name
- Pods-SVProgressHUD
- productName
- Pods-SVProgressHUD
- productReference
- C8409304ABBDB3DE6635DB18
- productType
- com.apple.product-type.library.static
- 674480447F049BFA1C4EA514
+ 5B5B0973E9590ACF8941A307
includeInIndex
1
@@ -2783,21 +2844,12 @@
PBXFileReference
lastKnownFileType
sourcecode.c.h
- name
- UIImageView+AFNetworking.h
path
- UIKit+AFNetworking/UIImageView+AFNetworking.h
+ Pods-SVWebViewController-prefix.pch
sourceTree
<group>
- 67528D3EFE5A643ED1F3CCAA
-
- fileRef
- 0BC85B368F05F28D8AC1E014
- isa
- PBXBuildFile
-
- 69070D1F2DAD001B977D7FCD
+ 5BF9005E499D27C097642952
includeInIndex
1
@@ -2806,67 +2858,93 @@
lastKnownFileType
sourcecode.c.h
name
- SDWebImagePrefetcher.h
+ SVModalWebViewController.h
path
- SDWebImage/SDWebImagePrefetcher.h
+ SVWebViewController/SVModalWebViewController.h
+ sourceTree
+ <group>
+
+ 5C7D9293E6B269F06D2001DA
+
+ children
+
+ EAF234E3AA32CB7DAE26A06F
+ 2B0136D8B5C9A7B320D8A50D
+ 0ADA0BBE8F6E0CF27A17B204
+ 5B5B0973E9590ACF8941A307
+
+ isa
+ PBXGroup
+ name
+ Support Files
+ path
+ ../Target Support Files/Pods-SVWebViewController
sourceTree
<group>
- 6947C9D1C5EE33C1D2440E0C
+ 5D33BED88C7C8B56D97308AD
+
+ isa
+ PBXTargetDependency
+ name
+ Pods-SDWebImage
+ target
+ 0CBA1F61EC68D9CDA478C899
+ targetProxy
+ 9A3726BF835126AC3A215F0A
+
+ 5DFCBC9D949176E5760EC64E
fileRef
- F0DD19AA7C01867C1769DBE1
+ 0338848C9C451EFDEF77531F
isa
PBXBuildFile
- 69F567464F319FC63F2636E9
+ 5E76D0C8307E26EBB442C355
- fileRef
- D9CF805123DCF31BD815B4BB
+ includeInIndex
+ 1
isa
- PBXBuildFile
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
+ path
+ Pods-Shimmer-dummy.m
+ sourceTree
+ <group>
- 6A082816851C55476BD99C06
+ 5E8DB0A06DAF83A7632381C1
children
- B3654B8D5A85FC44A7A6B1FE
- 11292E3DE8EF40F9DCBCD526
- 57FA31C7342E4A8693201F60
- A7755A9FB17EA678C37DCD95
+ AD0CEA85A2185B48B09C220B
+ 37E7B477D7652800A3F341C3
+ 335361E3B7EBFEF025533997
+ 267EA0919FE8615662F5C2BE
isa
PBXGroup
name
Support Files
path
- ../Target Support Files/Pods-MJRefresh
+ ../Target Support Files/Pods-SDWebImage
sourceTree
<group>
- 6A38B085018671A0ABB83BE1
+ 5EEA0F052F38C601F48496AB
+ explicitFileType
+ archive.ar
includeInIndex
- 1
+ 0
isa
PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- name
- MTLReflection.h
path
- Mantle/MTLReflection.h
+ libPods-Shimmer.a
sourceTree
- <group>
-
- 6AE46452959456D9CAA2648A
-
- fileRef
- 3ED88041ED6DCCA7AB130669
- isa
- PBXBuildFile
+ BUILT_PRODUCTS_DIR
- 6B6B026C7F8F1376C998B055
+ 60217EF2C452852C1A0BAB32
includeInIndex
1
@@ -2875,52 +2953,36 @@
lastKnownFileType
sourcecode.c.h
path
- Pods-Mantle-prefix.pch
+ Pods-Shimmer-prefix.pch
sourceTree
<group>
- 6C469821D18CEA22E80ACA5E
-
- fileRef
- CE4B7722CAC9ED8DD0114663
- isa
- PBXBuildFile
-
- 6C883654D7A0A3023FD1840D
+ 606339BB1F98D18E401A0055
- fileRef
- E96F46F8A984911D7538CA63
- isa
- PBXBuildFile
-
- 6C91BBFD0AEB7230111657C4
-
- children
+ buildConfigurationList
+ 5824DF828B372575804DB4F5
+ buildPhases
- 2384225F66B601A470E03B2D
- BF9582E6D1D11AAE4C82790C
- CE4B7722CAC9ED8DD0114663
- D2AE7F8D94E0B80BFA8F603A
- A32AD2139187CB1F5F2B6247
- FC45931EABC40836F3C02FDB
- B2DFB8ABE3C361564605FC09
- D8F1FDF888DD2382AECC30C3
- C56F74D0AAB1C57653DA7F7A
- 983F9AB5B982D654799AA2AC
- 58D5E10B6F509A4D289AC17C
- F3E77A78BED9A830D2670005
- 34257C1DD98D838891B765BC
+ AF9098952D1C698BC780EB65
+ D7FD3BD46B1CABD2F2AE50EE
+ B3A659BBB79CFA97EFB8C1B4
+ buildRules
+
+ dependencies
+
isa
- PBXGroup
+ PBXNativeTarget
name
- SWTableViewCell
- path
- SWTableViewCell
- sourceTree
- <group>
+ Pods-Shimmer
+ productName
+ Pods-Shimmer
+ productReference
+ 5EEA0F052F38C601F48496AB
+ productType
+ com.apple.product-type.library.static
- 6D0FE93D2F53E6F9BE778A43
+ 60A25E261550AFF0655E9701
includeInIndex
1
@@ -2929,20 +2991,13 @@
lastKnownFileType
sourcecode.c.h
name
- EXTRuntimeExtensions.h
+ SVWebViewController.h
path
- Mantle/extobjc/EXTRuntimeExtensions.h
+ SVWebViewController/SVWebViewController.h
sourceTree
<group>
- 6D3B22115589829E7FEAC2D2
-
- fileRef
- 7EABDBD965900014161BECCC
- isa
- PBXBuildFile
-
- 6D6492CFDFC03E3EEED90937
+ 62A22F50D3F5248A35D55225
includeInIndex
1
@@ -2951,49 +3006,50 @@
lastKnownFileType
sourcecode.c.h
name
- UIActivityIndicatorView+AFNetworking.h
+ SVWebViewControllerActivitySafari.h
path
- UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h
+ SVWebViewController/UIActivities/Safari/SVWebViewControllerActivitySafari.h
sourceTree
<group>
- 6DC5F2F2A80D898D1B9BA4E9
+ 62A986D71B8732D3ED882DA2
fileRef
- 4D56B1E3005FDE505FCEF6C6
+ 860338F0E2A28100CD8283CB
isa
PBXBuildFile
- 6EE966C6726621AA9BA61694
+ 633FD29B2A326506D2C73CED
fileRef
- 16BE2A454A10A0FFBBFDD201
+ F21CB8120EF2D5EE038E22B2
isa
PBXBuildFile
- 70F7A8DB0E39B67802CA7A76
+ 63CD09D5E84ABDF378BDE9CA
- includeInIndex
- 1
+ fileRef
+ E05AA74B831F33187A80AFB2
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- name
- SVWebViewController.h
- path
- SVWebViewController/SVWebViewController.h
- sourceTree
- <group>
+ PBXBuildFile
- 7119A73FBB159384BD4FC17E
+ 649B019D2E9C917DF8824AFF
- fileRef
- D8F1FDF888DD2382AECC30C3
+ children
+
+ B27A22B747AB549ED4F93034
+ 244FECFEBCA55B4B22B48100
+ CA17115300376D75D26440F2
+ 8808B35EE72A9298BBA51786
+
isa
- PBXBuildFile
+ PBXGroup
+ name
+ NSURLSession
+ sourceTree
+ <group>
- 716C03D21AAED4A8DD5ED96E
+ 6516689B190F38FDE8D21843
includeInIndex
1
@@ -3001,24 +3057,15 @@
PBXFileReference
lastKnownFileType
sourcecode.c.objc
- name
- SDWebImageDecoder.m
path
- SDWebImage/SDWebImageDecoder.m
+ Pods-dummy.m
sourceTree
<group>
- 720BC6CAA4ECD29F66CE897D
-
- fileRef
- A32AD2139187CB1F5F2B6247
- isa
- PBXBuildFile
-
- 72575C4414A386B75A1236C3
+ 6588A0868BCC4183CA3B6A86
baseConfigurationReference
- F20B4E0EAAA530D24685A4E2
+ 4D44B23CA21D5B5AF8203047
buildSettings
ALWAYS_SEARCH_USER_PATHS
@@ -3030,7 +3077,7 @@
GCC_PRECOMPILE_PREFIX_HEADER
YES
GCC_PREFIX_HEADER
- Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-prefix.pch
+ Target Support Files/Pods-Mantle/Pods-Mantle-prefix.pch
INSTALL_PATH
$(BUILT_PRODUCTS_DIR)
IPHONEOS_DEPLOYMENT_TARGET
@@ -3065,302 +3112,242 @@
name
Release
- 726EFC473FE50E3788EFFEEF
-
- fileRef
- F0D0B8FA1F237AF39207A58C
- isa
- PBXBuildFile
-
- 72C660C537791274ABD52CB9
-
- fileRef
- AD4719C2919B562DF3C80502
- isa
- PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
-
- 72D8C02503DA06347455FDD9
-
- containerPortal
- 003A31C6AADD74836B88341F
- isa
- PBXContainerItemProxy
- proxyType
- 1
- remoteGlobalIDString
- D6558E03D7E8E7369D57D62A
- remoteInfo
- Pods-MJRefresh
-
- 730266F29F62BC3EB931952F
+ 65CF839D7AAAAC698C0175E9
fileRef
- C32A44B3BB593CF09E391F55
+ FA622950AEB141300BCA6B1F
isa
PBXBuildFile
- 7371E4E66A36022278C4AA90
-
- buildActionMask
- 2147483647
- files
-
- B81737201F183B1D172A4B4D
- BFA9BA48E845CDA5D016018D
-
- isa
- PBXFrameworksBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
-
- 73866FD56D89AA5A3F622874
-
- buildActionMask
- 2147483647
- files
-
- 4404E8E40C694424BA0B2EA2
- 91ACDD3A1590BBCBEDEBA6E4
- 8AFBA1F303183188ABA0AD0D
- 4510BD0D82B5FD8633E82F6C
- 2D77E6FB71644E503AB9ED42
- 9B92478EA76FF9303AFAE57A
- EAABEB6BACA94FCEFBA11DFD
- FB6C8948A46CF245ECD20949
- 436DFB9BEE3EAF06EAB25B0A
- 3F40BF383E1E1834C0191BD5
- 62A6847E2C4950BA9C5A8A73
- C3756A16C38B7B1455914F49
- FDAFE1F6255ECC888D7503AB
- 72C660C537791274ABD52CB9
- DFFAC01197AE918D4C9DFD66
-
- isa
- PBXSourcesBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
-
- 73926FAB26BEDB4523776F71
+ 674019461553B37DDF831022
buildActionMask
2147483647
files
- CB6E38F58D69B7640B71B0D2
- 7EEF3E303A89EACE920C35DD
+ 53A7BA974083ADCCB4248257
+ 9E1F1FBB05AEABE72CE1EB2A
+ 1C1CFA57D7F622E23C370378
+ FB840FFD2E5B875EC18E84DE
+ 76EAC2827D40982C6B2AEE5C
isa
PBXHeadersBuildPhase
runOnlyForDeploymentPostprocessing
0
- 7398CA0C7FAD6B1A8E5B3A95
+ 6813759A3D4B289309C65CC8
- children
-
- 1BF5129F506CB75B0F1BC5FB
- 80D1CC4C00005AC726EEF730
- E29DFA8F7F2E89354CECB6C3
- 057A36C64C16BAE9CBB65645
- 795E09B9C10CEEFC412F3BF1
- D2504912E25654781C939724
- 52D9636A49CE4EAB4B056599
- 019033947122D26DFF88E20C
- 86C0AE129EAF30BD5988B84A
- 475828FB9C2F29954582B1E4
- 30531E76C05F3BC19F4D8D31
-
+ includeInIndex
+ 1
isa
- PBXGroup
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
name
- Resources
+ SWTableViewCell.m
+ path
+ SWTableViewCell/PodFiles/SWTableViewCell.m
sourceTree
<group>
- 749D67B382740B441A6C9985
+ 6853E7DEAC952ED017DD382B
fileRef
- 292F5F1319A89AE506A962C2
+ 0C2A438B42DC07E1A2B8E51B
isa
PBXBuildFile
- 74B2111F4657AE8313673C8E
-
- isa
- PBXTargetDependency
- name
- Pods-SWTableViewCell
- target
- 0E44B521E203EC4F111815E4
- targetProxy
- A212E3E719279B15D99358D7
-
- 74ED67273EBDF1D93351D598
+ 6922FCE247854E0C6FD2B49C
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- text.xcconfig
+ sourcecode.c.h
+ name
+ MTLReflection.h
path
- Pods-SVProgressHUD.xcconfig
+ Mantle/MTLReflection.h
sourceTree
<group>
- 752BB0BB115A89E3F4860E7E
+ 6A9D880FB2B5B01B5C3566A4
children
- 5737FC94B9492B6E6C616163
- 221E3FF2B9CDB1D4F3615F0D
- 1F5410B3AD75104BB163C869
- C0ECB4C8D31A24B2C3CF9E1F
- FC5FC75F692847F3591B34B3
- ECDFCA3A35CD6A95747B8E90
- E0E9DDEE088E41C8CF4C003D
+ 9D641BF01B9DCB3759BB7650
+ ED63151D6E956C666D9BD14F
+ 0338848C9C451EFDEF77531F
+ E841AAF06ED6A0CAC0CC05ED
+ 1740A3C059CD9E1542403D15
+ 815759C5B0D9D8181BED265B
+ 6922FCE247854E0C6FD2B49C
+ CFC410BCCACA205D410F13B3
+ 72330DDBCFF840EE908319EC
+ 2DE7C234F276794E257B6C45
+ 988E655792186A580DD56ECC
+ 3C5E49F687C4DB8F5FCDB770
+ 253314F7D8BF0DB55988AFAA
+ 37335D22593D7576DD7BB8F3
+ 5534E358144AA17472034E87
+ 288C837B4AE7323562462C3A
+ 51AFD4B392A31A2289544A18
+ B1F4FF21E45DFB02CAA6DBFF
+ 2567A3A1F416E5F48EE273BB
+ 017B14BC9F461EE2E432473F
+ 4C8B4F9E0751276ACBFFACEA
+ CD8349A3F4BF18C038579DC6
+ A01D6EC0BFF8D2AB4B0FEFB8
+ 11C73DBC7E4CD70B20E5C5F8
+ E775B6493ABD67E0B9F1A83E
+ 27FB9860B22C4D48341CBEA3
+ B5A085F43F7BA05E99922AEF
+ CD33ACF6C201881D46574802
+ 7A3E48B8E1F6B8E4E43315C9
+ 4C37BA56B960303B4E376BC6
+ 40FBFAB85410F664A548F0A9
isa
PBXGroup
name
- Pods
+ Mantle
path
- Target Support Files/Pods
+ Mantle
sourceTree
<group>
- 7571161F8493E257141282E2
+ 6B0A44465BD93D4F1D552675
- buildConfigurations
-
- 823C291B70653700AE069288
- 7DB2B870719E2167330488F5
-
- defaultConfigurationIsVisible
- 0
- defaultConfigurationName
- Release
+ fileRef
+ E775B6493ABD67E0B9F1A83E
isa
- XCConfigurationList
+ PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
- 75C7388F53F668992B97A813
+ 6B37248339C21DF24CD921DE
+ fileRef
+ 3B7B0A7B452BFAC999ED51AF
isa
- PBXTargetDependency
- name
- Pods-MJRefresh
- target
- D6558E03D7E8E7369D57D62A
- targetProxy
- 72D8C02503DA06347455FDD9
+ PBXBuildFile
- 76D0502FC1D6208D9E893050
+ 6BF3878F46EA166D96C264CA
- includeInIndex
- 1
+ buildActionMask
+ 2147483647
+ files
+
+ 94A0B58F2FAF9C1CBD3A7105
+ F095602FA7AC56B1A442458D
+ 2EA9025C8D014A7B2C9DCB08
+ C28A118CD27C32728F03EB4F
+ B8B5CBC18C4215410E396EBB
+ 2AC8126F41306857B4D7B228
+ 5B2761C05AC940A3B44CABDD
+ 78794F2C9DDADE41F7FD5AB3
+ 2CFDDB557FAFD4668FB15C36
+ ABB9619998DACD77052F7D09
+ 061F169028DE0BDB1A04F4C7
+ 8DA2B81909CC09D1C204671D
+ 420247AC48DD4BCDF5E6B7D7
+ FA1529D54F26EFCAE13119BE
+ 83CFA37EDC0935EFFD9704D7
+
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- name
- UIWebView+AFNetworking.h
- path
- UIKit+AFNetworking/UIWebView+AFNetworking.h
- sourceTree
- <group>
+ PBXSourcesBuildPhase
+ runOnlyForDeploymentPostprocessing
+ 0
- 76F2FB474F9C57ED0AB606BB
+ 6C9BB6BBF80FB04842296734
- children
-
- 2046088381816FB1A6115AE8
- D09A62E8A6854C6E80B36152
- 7E1CD1AAAE86E52A5E55A54C
- EDA79BFF36ED8CC66472C4B4
-
+ fileRef
+ 6922FCE247854E0C6FD2B49C
isa
- PBXGroup
- name
- Serialization
- sourceTree
- <group>
+ PBXBuildFile
- 771F20504BB303BB62A88285
+ 6CE6AFC3F8CD70241EF59AB9
- includeInIndex
- 1
+ buildConfigurationList
+ 123002C87D23EABEC54428B6
+ buildPhases
+
+ 8DD65D28966370811AABAD20
+ DC8F3FCA873B6D58BD536AEC
+ 1EE396C30D8A13447C80F3A0
+
+ buildRules
+
+ dependencies
+
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
+ PBXNativeTarget
name
- NSDictionary+MTLManipulationAdditions.m
- path
- Mantle/NSDictionary+MTLManipulationAdditions.m
- sourceTree
- <group>
+ Pods-MJRefresh
+ productName
+ Pods-MJRefresh
+ productReference
+ 942FFA243C26063337A25F3C
+ productType
+ com.apple.product-type.library.static
- 778D223C43915891DECBE645
+ 6D065165EADB62FE6ADC04D6
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
- name
- UIProgressView+AFNetworking.h
+ text
path
- UIKit+AFNetworking/UIProgressView+AFNetworking.h
+ Pods-acknowledgements.markdown
sourceTree
<group>
- 77B2205754BF87FD2229D9F2
-
- fileRef
- D2AE7F8D94E0B80BFA8F603A
- isa
- PBXBuildFile
-
- 77D44783F9EE017394DF2D6A
+ 6DA4BD4EE3CC4E837EA25655
children
- 2F252426DE161299AE05188D
+ BEA878B43A1467881A0B05D9
+ 7B77F3265638135D167796E4
+ 59D7C7EEA8FE7A18F7242FAB
+ 8C9E7A7C0B30CF70BA821647
isa
PBXGroup
name
- Resources
+ Serialization
sourceTree
<group>
- 795E09B9C10CEEFC412F3BF1
+ 6E70AEEBE69E729815D15C10
+
+ fileRef
+ 8C9E7A7C0B30CF70BA821647
+ isa
+ PBXBuildFile
+
+ 6EC30786B89A1DAAEF831D65
includeInIndex
1
isa
PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
name
- SVWebViewControllerActivitySafari-iPad.png
+ MJRefreshGifFooter.h
path
- SVWebViewController/UIActivities/Safari/SVWebViewControllerActivitySafari-iPad.png
+ MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshGifFooter.h
sourceTree
<group>
- 79AE7927E2E34267BBB4EEFB
-
- fileRef
- 11E705D1FBE2231D8B3FA30B
- isa
- PBXBuildFile
-
- 7A1CB4CAA83E0FC77E12607B
+ 70056B349FEB6A757345F167
includeInIndex
1
@@ -3369,13 +3356,13 @@
lastKnownFileType
sourcecode.c.objc
name
- UIButton+WebCache.m
+ UIProgressView+AFNetworking.m
path
- SDWebImage/UIButton+WebCache.m
+ UIKit+AFNetworking/UIProgressView+AFNetworking.m
sourceTree
<group>
- 7A75EF39F7B6094E98E9D58F
+ 701F96ACC76C74D7DBFE587B
includeInIndex
1
@@ -3384,47 +3371,52 @@
lastKnownFileType
sourcecode.c.h
name
- UIRefreshControl+AFNetworking.h
+ AFNetworking.h
path
- UIKit+AFNetworking/UIRefreshControl+AFNetworking.h
+ AFNetworking/AFNetworking.h
sourceTree
<group>
- 7A9806F1FFB8C59E80CBFD08
+ 70CDF1B0FB6B3C3599FC5BDD
- children
+ buildConfigurationList
+ 98484AC1E6D81524BCE077DD
+ buildPhases
- 3E47599B0E330499635F07EE
- 47C11AD21FEAD8A5CAA86FC0
- 0398B69338481EC817F6F6EB
- 3CF9B45DDE34993A3FD50533
- 0DDB7686E187F3FC19D520AC
- 0371BF6A0BA2FCC5D93407F8
- C8409304ABBDB3DE6635DB18
- 8BF1A56862208AAE73DA9531
- 463D037C8D05265B93AA341F
+ 7912FDF0D8853EF27A50D85E
+ 9A7DB548A2EAB74C183F19D1
+ 8705DB8A847BA110AA5ABA47
+ buildRules
+
+ dependencies
+
isa
- PBXGroup
+ PBXNativeTarget
name
- Products
- sourceTree
- <group>
+ Pods-AFNetworking
+ productName
+ Pods-AFNetworking
+ productReference
+ 8FE9BF5050F6FC295DDC2348
+ productType
+ com.apple.product-type.library.static
- 7AF9843A5A131AAFDB93EA21
+ 70F13B6112440F37C2D167F8
- includeInIndex
- 1
+ buildConfigurations
+
+ 75590BD8E7AE2E526793E2B2
+ 0C00902A01286919FC46FC9B
+
+ defaultConfigurationIsVisible
+ 0
+ defaultConfigurationName
+ Release
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- path
- Pods-FMDB-prefix.pch
- sourceTree
- <group>
+ XCConfigurationList
- 7B237DEB99E4A1EC780BD565
+ 71DC522FCAFF9D6B38C8C1C8
includeInIndex
1
@@ -3433,98 +3425,42 @@
lastKnownFileType
sourcecode.c.objc
name
- AFSecurityPolicy.m
+ UIImage+MultiFormat.m
path
- AFNetworking/AFSecurityPolicy.m
+ SDWebImage/UIImage+MultiFormat.m
sourceTree
<group>
- 7B339A4AB2229806F0376DB7
-
- fileRef
- 27A001025D8F6246D8E0D8D3
- isa
- PBXBuildFile
-
- 7C9788498CCBBD0718711B7D
-
- fileRef
- BD7A57AABDA83E720552763E
- isa
- PBXBuildFile
-
- 7CD1296E64395F26B193A132
-
- fileRef
- 90692384AE86654AF740CBA0
- isa
- PBXBuildFile
-
- 7D4286C5720F98FA2A3F8A35
+ 7216C951E31F705D623F936A
- fileRef
- 8ED9213EE55680C24F1EB677
- isa
- PBXBuildFile
-
- 7DA715BA2498F3CB799A4431
-
- fileRef
- 2A7803167CE7616DAD6D45D8
+ buildActionMask
+ 2147483647
+ files
+
+ E0064455F987AA18ECC111F4
+ 8F962D84A0DA970EE6722D99
+
isa
- PBXBuildFile
+ PBXHeadersBuildPhase
+ runOnlyForDeploymentPostprocessing
+ 0
- 7DB2B870719E2167330488F5
+ 72330DDBCFF840EE908319EC
- baseConfigurationReference
- 29C91E9A9A1FACD36088397D
- buildSettings
-
- ALWAYS_SEARCH_USER_PATHS
- NO
- COPY_PHASE_STRIP
- YES
- DSTROOT
- /tmp/xcodeproj.dst
- GCC_PRECOMPILE_PREFIX_HEADER
- YES
- GCC_PREFIX_HEADER
- Target Support Files/Pods-SWTableViewCell/Pods-SWTableViewCell-prefix.pch
- INSTALL_PATH
- $(BUILT_PRODUCTS_DIR)
- IPHONEOS_DEPLOYMENT_TARGET
- 7.0
- OTHER_CFLAGS
-
- -DNS_BLOCK_ASSERTIONS=1
- $(inherited)
-
- OTHER_CPLUSPLUSFLAGS
-
- -DNS_BLOCK_ASSERTIONS=1
- $(inherited)
-
- OTHER_LDFLAGS
-
- OTHER_LIBTOOLFLAGS
-
- PRODUCT_NAME
- $(TARGET_NAME)
- PUBLIC_HEADERS_FOLDER_PATH
- $(TARGET_NAME)
- SDKROOT
- iphoneos
- SKIP_INSTALL
- YES
- VALIDATE_PRODUCT
- YES
-
+ includeInIndex
+ 1
isa
- XCBuildConfiguration
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
name
- Release
+ MTLTransformerErrorHandling.h
+ path
+ Mantle/MTLTransformerErrorHandling.h
+ sourceTree
+ <group>
- 7E1CD1AAAE86E52A5E55A54C
+ 72EEDBD82F41D41F16FF3C11
includeInIndex
1
@@ -3532,17 +3468,15 @@
PBXFileReference
lastKnownFileType
sourcecode.c.h
- name
- AFURLResponseSerialization.h
path
- AFNetworking/AFURLResponseSerialization.h
+ Pods-AFNetworking-prefix.pch
sourceTree
<group>
- 7E41E08A91865687803B6C82
+ 73538EEEADB1058CDECEF95C
baseConfigurationReference
- A1B208310F6C031CA9568682
+ A60FF7B612E384CD0FBBC028
buildSettings
ALWAYS_SEARCH_USER_PATHS
@@ -3553,8 +3487,6 @@
/tmp/xcodeproj.dst
GCC_PRECOMPILE_PREFIX_HEADER
YES
- GCC_PREFIX_HEADER
- Target Support Files/Pods-SDWebImage/Pods-SDWebImage-prefix.pch
INSTALL_PATH
$(BUILT_PRODUCTS_DIR)
IPHONEOS_DEPLOYMENT_TARGET
@@ -3589,141 +3521,90 @@
name
Release
- 7E4322D8FA302168CB5CFFB2
-
- buildActionMask
- 2147483647
- files
-
- 87A2F8DB244BEC5D78F28B8B
-
- isa
- PBXFrameworksBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
-
- 7E4DEC9F5579FF9E6012310D
-
- buildActionMask
- 2147483647
- files
-
- 2FC003B95AA7F89F6830FF92
- ECFFA56C6B3F8AC988E09B43
- 6AE46452959456D9CAA2648A
- 3C55B095805681785D374172
- D568513A73D383D812B92361
- 2170FBC10D2E8E490ECD303D
- CCD59E2FDDA491F626635409
- 016D2ED5429A374F8D023442
-
- isa
- PBXSourcesBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
-
- 7EABDBD965900014161BECCC
+ 7388FE0012D1A4E22D1610D3
+ includeInIndex
+ 1
isa
PBXFileReference
lastKnownFileType
- wrapper.framework
+ sourcecode.c.h
name
- ImageIO.framework
+ EXTKeyPathCoding.h
path
- Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/ImageIO.framework
+ Mantle/extobjc/EXTKeyPathCoding.h
sourceTree
- DEVELOPER_DIR
-
- 7EEF3E303A89EACE920C35DD
-
- fileRef
- 47ED5B3E2E498FA972A1AC3B
- isa
- PBXBuildFile
-
- 7F117C1078DB1AD4F3B4FE11
-
- fileRef
- 928FEC03396D35D183A65963
- isa
- PBXBuildFile
+ <group>
- 7F71FB5470A79B51285AB34E
+ 73B5C770199A3692724BB0F2
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- NSObject+MTLComparisonAdditions.m
+ metamacros.h
path
- Mantle/NSObject+MTLComparisonAdditions.m
+ Mantle/extobjc/metamacros.h
sourceTree
<group>
- 7FFBF073B63F5E27B5D0072F
+ 73F06571B260553C31103BC9
- buildConfigurationList
- 8EB04CFA656709317963A2B2
- buildPhases
-
- 27CC88179E549D8028BB3973
- B75F517882BF000A53EC59B3
- EBB725B945B1732ECF3A9006
-
- buildRules
-
- dependencies
-
+ includeInIndex
+ 1
isa
- PBXNativeTarget
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
name
- Pods-SDWebImage
- productName
- Pods-SDWebImage
- productReference
- 0371BF6A0BA2FCC5D93407F8
- productType
- com.apple.product-type.library.static
+ UIActivityIndicatorView+AFNetworking.m
+ path
+ UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.m
+ sourceTree
+ <group>
- 80D1CC4C00005AC726EEF730
+ 747A95C1078F0A1823197D16
includeInIndex
1
isa
PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
name
- SVWebViewControllerActivityChrome-iPad.png
+ MJRefreshComponent.m
path
- SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome-iPad.png
+ MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshComponent.m
sourceTree
<group>
- 816C64CDAD58A599C6C8138B
+ 748ADA32DF8501663602FE1E
- children
-
- CAC00BB41401121BDC44E7E5
- B9F5BA86ACFC81B344D15D30
- A95D82B9D1D2BEFE3D2DAB00
- 6B6B026C7F8F1376C998B055
-
+ fileRef
+ BD21D8D91FCD26B8FAA257D1
isa
- PBXGroup
- name
- Support Files
+ PBXBuildFile
+
+ 751596E07647168536D8770B
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
path
- ../Target Support Files/Pods-Mantle
+ Pods-SVProgressHUD-dummy.m
sourceTree
<group>
- 823C291B70653700AE069288
+ 75590BD8E7AE2E526793E2B2
baseConfigurationReference
- 29C91E9A9A1FACD36088397D
+ 37E7B477D7652800A3F341C3
buildSettings
ALWAYS_SEARCH_USER_PATHS
@@ -3739,7 +3620,7 @@
GCC_PRECOMPILE_PREFIX_HEADER
YES
GCC_PREFIX_HEADER
- Target Support Files/Pods-SWTableViewCell/Pods-SWTableViewCell-prefix.pch
+ Target Support Files/Pods-SDWebImage/Pods-SDWebImage-prefix.pch
GCC_PREPROCESSOR_DEFINITIONS
DEBUG=1
@@ -3769,28 +3650,98 @@
name
Debug
- 82D7942CFFB4B5F9A8039B0E
+ 75EB3E8632BA17AD3DB6A98D
- buildConfigurations
+ fileRef
+ 76B7796A1EB6299CE260128F
+ isa
+ PBXBuildFile
+
+ 766E6FD13340EAC7CA2A74C0
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ text.xcconfig
+ path
+ Pods-Shimmer-Private.xcconfig
+ sourceTree
+ <group>
+
+ 76B7796A1EB6299CE260128F
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
+ name
+ FBShimmeringLayer.h
+ path
+ FBShimmering/FBShimmeringLayer.h
+ sourceTree
+ <group>
+
+ 76EAC2827D40982C6B2AEE5C
+
+ fileRef
+ 62A22F50D3F5248A35D55225
+ isa
+ PBXBuildFile
+
+ 78794F2C9DDADE41F7FD5AB3
+
+ fileRef
+ 9A7E479B26D9F0FDE6B70438
+ isa
+ PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
+
+ 7912FDF0D8853EF27A50D85E
+
+ buildActionMask
+ 2147483647
+ files
- FC51B49E4686DFD82E09DE0B
- AF263AC92D39C068F246DF63
+ FEEA599D4AD5EEB6BFEE8A7D
+ F722582AF97F8BC79D022EB9
+ BC5EAF24594607E38A7636C1
+ BBB4F0C42599E9EC3619BD9D
+ FC41A5A6C2DA7175CC3736A2
+ C43EF4B93C5AC394AA76BC4F
+ FC6DA76B60E9169D68FB7BCB
+ B61350AA0E1ECAE94B5C03A3
+ 6E70AEEBE69E729815D15C10
+ 81487A46AB821C62AFB9CA08
+ 9804F4F62BBB5D18B11673E6
+ 7F8E08C8B095E02971789904
+ BAFE0E98CDCE41DE001C1B4A
+ 3A88AB895E6CE17129F0F61A
+ 51DD446E599BC1395844D43C
+ 514C0D413A4720963B1FE848
+ 8FC00C6E9189DC2E8F15E968
+ 536892A184C34EDCDF63E390
- defaultConfigurationIsVisible
- 0
- defaultConfigurationName
- Release
isa
- XCConfigurationList
+ PBXSourcesBuildPhase
+ runOnlyForDeploymentPostprocessing
+ 0
- 83C50DBF98466D8F993D6269
+ 79848890F54B80767F70DD47
fileRef
- 3D08731A2D8B7A9D2A860E1E
+ D9BC1825A20D16596316B079
isa
PBXBuildFile
- 846C466F2240C4C93CD6C24C
+ 7A0FE04DB8AACD8CD00D68CA
includeInIndex
1
@@ -3799,13 +3750,82 @@
lastKnownFileType
sourcecode.c.objc
name
- SVWebViewController.m
+ MJRefreshFooter.m
path
- SVWebViewController/SVWebViewController.m
+ MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshFooter.m
+ sourceTree
+ <group>
+
+ 7A3E48B8E1F6B8E4E43315C9
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
+ name
+ NSValueTransformer+MTLPredefinedTransformerAdditions.m
+ path
+ Mantle/NSValueTransformer+MTLPredefinedTransformerAdditions.m
+ sourceTree
+ <group>
+
+ 7AB6812792AFA62E07248261
+
+ containerPortal
+ 81D979F3E87416F4B4516D5F
+ isa
+ PBXContainerItemProxy
+ proxyType
+ 1
+ remoteGlobalIDString
+ 93425A71C668EB5F6C7FA734
+ remoteInfo
+ Pods-SWTableViewCell
+
+ 7B223D387702971DA08CD4D7
+
+ explicitFileType
+ archive.ar
+ includeInIndex
+ 0
+ isa
+ PBXFileReference
+ path
+ libPods-SVWebViewController.a
+ sourceTree
+ BUILT_PRODUCTS_DIR
+
+ 7B77F3265638135D167796E4
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
+ name
+ AFURLRequestSerialization.m
+ path
+ AFNetworking/AFURLRequestSerialization.m
sourceTree
<group>
- 84E79296009B0C709F29B5C1
+ 7BF20CB8E89FE06EA149B817
+
+ explicitFileType
+ archive.ar
+ includeInIndex
+ 0
+ isa
+ PBXFileReference
+ path
+ libPods-SVProgressHUD.a
+ sourceTree
+ BUILT_PRODUCTS_DIR
+
+ 7CFB13291239474A4401636E
includeInIndex
1
@@ -3814,13 +3834,28 @@
lastKnownFileType
sourcecode.c.h
name
- SDWebImageDownloader.h
+ UIProgressView+AFNetworking.h
path
- SDWebImage/SDWebImageDownloader.h
+ UIKit+AFNetworking/UIProgressView+AFNetworking.h
+ sourceTree
+ <group>
+
+ 7D3DFDFFF6AA0103584F02A3
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
+ name
+ SWCellScrollView.m
+ path
+ SWTableViewCell/PodFiles/SWCellScrollView.m
sourceTree
<group>
- 856BC697A0DE727D2365B4B7
+ 7DDB2A7EFEFD7D66D7D642B4
includeInIndex
1
@@ -3829,90 +3864,154 @@
lastKnownFileType
sourcecode.c.h
name
- NSError+MTLModelException.h
+ SWUtilityButtonView.h
path
- Mantle/NSError+MTLModelException.h
+ SWTableViewCell/PodFiles/SWUtilityButtonView.h
sourceTree
<group>
- 86C0AE129EAF30BD5988B84A
+ 7E60A67D22F82309B3B23922
includeInIndex
1
isa
PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
name
- SVWebViewControllerBack@2x.png
+ AFNetworkReachabilityManager.m
path
- SVWebViewController/SVWebViewController.bundle/SVWebViewControllerBack@2x.png
+ AFNetworking/AFNetworkReachabilityManager.m
sourceTree
<group>
- 86F73289E11C480C16D33BCB
+ 7E75A1D26B56E04FE835CF83
- baseConfigurationReference
- ECDFCA3A35CD6A95747B8E90
- buildSettings
-
- ALWAYS_SEARCH_USER_PATHS
- NO
- COPY_PHASE_STRIP
- NO
- DSTROOT
- /tmp/xcodeproj.dst
- GCC_DYNAMIC_NO_PIC
- NO
- GCC_OPTIMIZATION_LEVEL
- 0
- GCC_PRECOMPILE_PREFIX_HEADER
- YES
- GCC_PREPROCESSOR_DEFINITIONS
-
- DEBUG=1
- $(inherited)
-
- GCC_SYMBOLS_PRIVATE_EXTERN
- NO
- INSTALL_PATH
- $(BUILT_PRODUCTS_DIR)
- IPHONEOS_DEPLOYMENT_TARGET
- 7.0
- OTHER_LDFLAGS
-
- OTHER_LIBTOOLFLAGS
-
- PRODUCT_NAME
- $(TARGET_NAME)
- PUBLIC_HEADERS_FOLDER_PATH
- $(TARGET_NAME)
- SDKROOT
- iphoneos
- SKIP_INSTALL
- YES
-
+ children
+
+ 31571A3142EC0360BA8CE5A1
+
isa
- XCBuildConfiguration
+ PBXGroup
name
- Debug
+ Resources
+ sourceTree
+ <group>
+
+ 7EC2985EE432823B4911B78A
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
+ name
+ SVWebViewControllerActivityChrome.m
+ path
+ SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome.m
+ sourceTree
+ <group>
+
+ 7F8E08C8B095E02971789904
+
+ fileRef
+ 73F06571B260553C31103BC9
+ isa
+ PBXBuildFile
- 87A2F8DB244BEC5D78F28B8B
+ 80982DEADF8B2A5F2B26ADE1
fileRef
- F0D0B8FA1F237AF39207A58C
+ 8BAFDC2A67AEA3220C90038A
isa
PBXBuildFile
- 892235EA9B366AF2D9486607
+ 81487A46AB821C62AFB9CA08
+
+ fileRef
+ 8808B35EE72A9298BBA51786
+ isa
+ PBXBuildFile
+
+ 815759C5B0D9D8181BED265B
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
+ name
+ MTLModel+NSCoding.m
+ path
+ Mantle/MTLModel+NSCoding.m
+ sourceTree
+ <group>
+
+ 81D979F3E87416F4B4516D5F
+
+ attributes
+
+ LastUpgradeCheck
+ 0510
+
+ buildConfigurationList
+ 021537B5204C0FECE2ACE390
+ compatibilityVersion
+ Xcode 3.2
+ developmentRegion
+ English
+ hasScannedForEncodings
+ 0
+ isa
+ PBXProject
+ knownRegions
+
+ en
+
+ mainGroup
+ DEF1C98505E86E50864C1FC3
+ productRefGroup
+ DACCC598E67DEDF2B964152C
+ projectDirPath
+
+ projectReferences
+
+ projectRoot
+
+ targets
+
+ 4B3F73195C2488852EA8F7FA
+ 70CDF1B0FB6B3C3599FC5BDD
+ 6CE6AFC3F8CD70241EF59AB9
+ 577435415A323B682400D54D
+ 0CBA1F61EC68D9CDA478C899
+ D68D040FBA01D62A8E3F21CF
+ 1E803AD000DE2CF76ED8A078
+ 93425A71C668EB5F6C7FA734
+ 606339BB1F98D18E401A0055
+
+
+ 836D5E6C17DB983DF1634A69
- fileRef
- C684423B9F0BCABE69332621
+ includeInIndex
+ 1
isa
- PBXBuildFile
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
+ name
+ AFURLConnectionOperation.h
+ path
+ AFNetworking/AFURLConnectionOperation.h
+ sourceTree
+ <group>
- 895426A01E6E4514960D5307
+ 83CFA37EDC0935EFFD9704D7
fileRef
- 7A1CB4CAA83E0FC77E12607B
+ BC4BFA3BB3B2500FA7071308
isa
PBXBuildFile
settings
@@ -3921,14 +4020,21 @@
-DOS_OBJECT_USE_OBJC=0
- 89DFAC3443DB77191DF2822E
+ 842CCB76DC43252D77BC0631
+
+ fileRef
+ 988E655792186A580DD56ECC
+ isa
+ PBXBuildFile
+
+ 84A9291CE1BE9DD63DB2034A
fileRef
- 9AC054684C72878BFD1354BD
+ 7388FE0012D1A4E22D1610D3
isa
PBXBuildFile
- 8A081DC2D78B0C22A3B1CDDE
+ 84FE7E230D2FC3B77F845364
includeInIndex
1
@@ -3937,92 +4043,43 @@
lastKnownFileType
sourcecode.c.objc
name
- AFNetworkActivityIndicatorManager.m
+ UIRefreshControl+AFNetworking.m
path
- UIKit+AFNetworking/AFNetworkActivityIndicatorManager.m
+ UIKit+AFNetworking/UIRefreshControl+AFNetworking.m
sourceTree
<group>
- 8A72EC2E5ADEFD1185ACE525
+ 853955DAA548D7FF44BCEE0F
baseConfigurationReference
- E8D5D18DAA535CA6B08AA393
+ CD2CFD88AEC03BECA1A6CE00
buildSettings
ALWAYS_SEARCH_USER_PATHS
NO
COPY_PHASE_STRIP
- YES
+ NO
DSTROOT
/tmp/xcodeproj.dst
+ GCC_DYNAMIC_NO_PIC
+ NO
+ GCC_OPTIMIZATION_LEVEL
+ 0
GCC_PRECOMPILE_PREFIX_HEADER
YES
GCC_PREFIX_HEADER
- Target Support Files/Pods-SVWebViewController/Pods-SVWebViewController-prefix.pch
- INSTALL_PATH
- $(BUILT_PRODUCTS_DIR)
- IPHONEOS_DEPLOYMENT_TARGET
- 7.0
- OTHER_CFLAGS
-
- -DNS_BLOCK_ASSERTIONS=1
- $(inherited)
-
- OTHER_CPLUSPLUSFLAGS
+ Target Support Files/Pods-SWTableViewCell/Pods-SWTableViewCell-prefix.pch
+ GCC_PREPROCESSOR_DEFINITIONS
- -DNS_BLOCK_ASSERTIONS=1
+ DEBUG=1
$(inherited)
- OTHER_LDFLAGS
-
- OTHER_LIBTOOLFLAGS
-
- PRODUCT_NAME
- $(TARGET_NAME)
- PUBLIC_HEADERS_FOLDER_PATH
- $(TARGET_NAME)
- SDKROOT
- iphoneos
- SKIP_INSTALL
- YES
- VALIDATE_PRODUCT
- YES
-
- isa
- XCBuildConfiguration
- name
- Release
-
- 8A8E2AEA05C87BF2E72C7FCA
-
- baseConfigurationReference
- B9F5BA86ACFC81B344D15D30
- buildSettings
-
- ALWAYS_SEARCH_USER_PATHS
+ GCC_SYMBOLS_PRIVATE_EXTERN
NO
- COPY_PHASE_STRIP
- YES
- DSTROOT
- /tmp/xcodeproj.dst
- GCC_PRECOMPILE_PREFIX_HEADER
- YES
- GCC_PREFIX_HEADER
- Target Support Files/Pods-Mantle/Pods-Mantle-prefix.pch
INSTALL_PATH
$(BUILT_PRODUCTS_DIR)
IPHONEOS_DEPLOYMENT_TARGET
7.0
- OTHER_CFLAGS
-
- -DNS_BLOCK_ASSERTIONS=1
- $(inherited)
-
- OTHER_CPLUSPLUSFLAGS
-
- -DNS_BLOCK_ASSERTIONS=1
- $(inherited)
-
OTHER_LDFLAGS
OTHER_LIBTOOLFLAGS
@@ -4035,254 +4092,294 @@
iphoneos
SKIP_INSTALL
YES
- VALIDATE_PRODUCT
- YES
isa
XCBuildConfiguration
name
- Release
+ Debug
- 8AFBA1F303183188ABA0AD0D
+ 860338F0E2A28100CD8283CB
- fileRef
- 1817BF46EC0C042C7D3CF340
isa
- PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
+ PBXFileReference
+ lastKnownFileType
+ wrapper.framework
+ name
+ SystemConfiguration.framework
+ path
+ Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/SystemConfiguration.framework
+ sourceTree
+ DEVELOPER_DIR
- 8BF1A56862208AAE73DA9531
+ 866C612F677726DBC6F9B9D0
- explicitFileType
- archive.ar
- includeInIndex
+ buildActionMask
+ 2147483647
+ files
+
+ 383B6E4068731C879D329EBE
+
+ isa
+ PBXFrameworksBuildPhase
+ runOnlyForDeploymentPostprocessing
0
+
+ 8689A3CC3FD222309ED05ACB
+
+ includeInIndex
+ 1
isa
PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
+ name
+ NSData+ImageContentType.h
path
- libPods-SVWebViewController.a
+ SDWebImage/NSData+ImageContentType.h
sourceTree
- BUILT_PRODUCTS_DIR
-
- 8C11E60C3F243002B20ABAF7
-
- fileRef
- C8519CEEEF547AA9EE9D9271
- isa
- PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
+ <group>
- 8CCB2EE71B1282861778906D
+ 86AEF979AA53AF316293C8AD
fileRef
- 70F7A8DB0E39B67802CA7A76
+ 86EB9A08B9B6E1267BD57145
isa
PBXBuildFile
- 8D934380DB6CDDF6B1F43315
+ 86E430012FC510D92AFD64FF
fileRef
- BC949D87330F6EC5E34A3352
+ 73B5C770199A3692724BB0F2
isa
PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
- 8DC0686ECBB745003C3651C3
+ 86EB9A08B9B6E1267BD57145
- includeInIndex
- 1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ wrapper.framework
name
- UIView+WebCacheOperation.m
+ Foundation.framework
path
- SDWebImage/UIView+WebCacheOperation.m
+ Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Foundation.framework
sourceTree
- <group>
+ DEVELOPER_DIR
- 8DCB4D41A489D80F71A9D029
+ 8705DB8A847BA110AA5ABA47
- includeInIndex
- 1
+ buildActionMask
+ 2147483647
+ files
+
+ 525D311A9E6AFF1322548C37
+ D4C3346C10EF1BC04F58673E
+ 4F36D1CA09DF80E6C8E69420
+ 6853E7DEAC952ED017DD382B
+ BDDAD42C906683E324BA0911
+ EA8986163F9F6442BA8F993E
+ 5521BE44945832991316CDC3
+ C958D94D49E6ECE38DDFD29E
+ A13AB7B838A1874D45D4B857
+ 94D7806ED1B894F9AC3B12F3
+ E9A7BB0F66E56933CE58368F
+ 2B0B2A2AC2732C870C917A82
+ D4DB003F66931D9E0941ED7A
+ D2D8B6939934DB2DEE11DAA4
+ 2CE2F848E4E067A038B24583
+ 48A921C553D24CB2062EEA3F
+ 59C0FED9BB0FB19B319543E7
+ 4714840E94F4B9196E39555D
+ D7880C07AA847B66E17F9F0A
+
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- name
- SDImageCache.m
- path
- SDWebImage/SDImageCache.m
- sourceTree
- <group>
+ PBXHeadersBuildPhase
+ runOnlyForDeploymentPostprocessing
+ 0
- 8E7746C93B5A382A8BFB31C8
+ 878766D5C2D02668B15FED39
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- UIImage+GIF.m
+ UIAlertView+AFNetworking.h
path
- SDWebImage/UIImage+GIF.m
+ UIKit+AFNetworking/UIAlertView+AFNetworking.h
sourceTree
<group>
- 8EB04CFA656709317963A2B2
+ 87A539495A8DCAE923BEE754
- buildConfigurations
-
- 62417097E44F7D3F8139F32F
- 7E41E08A91865687803B6C82
-
- defaultConfigurationIsVisible
- 0
- defaultConfigurationName
- Release
+ fileRef
+ D15DE4AB72E69F69799EE587
isa
- XCConfigurationList
+ PBXBuildFile
- 8ED9213EE55680C24F1EB677
+ 87D9BF752A70DA83F123E5E7
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- UIScrollView+MJRefresh.h
+ MJRefreshConst.m
path
- MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJRefresh.h
+ MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshConst.m
sourceTree
<group>
- 8F935F9ED6A55A5476D707C4
-
- buildActionMask
- 2147483647
- files
-
- 726EFC473FE50E3788EFFEEF
-
- isa
- PBXFrameworksBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
-
- 8F938B6A800B85ACF6903654
+ 87EF8679D2D2B77AB2C96FCE
- fileRef
- 674480447F049BFA1C4EA514
+ baseConfigurationReference
+ 2B0136D8B5C9A7B320D8A50D
+ buildSettings
+
+ ALWAYS_SEARCH_USER_PATHS
+ NO
+ COPY_PHASE_STRIP
+ YES
+ DSTROOT
+ /tmp/xcodeproj.dst
+ GCC_PRECOMPILE_PREFIX_HEADER
+ YES
+ GCC_PREFIX_HEADER
+ Target Support Files/Pods-SVWebViewController/Pods-SVWebViewController-prefix.pch
+ INSTALL_PATH
+ $(BUILT_PRODUCTS_DIR)
+ IPHONEOS_DEPLOYMENT_TARGET
+ 7.0
+ OTHER_CFLAGS
+
+ -DNS_BLOCK_ASSERTIONS=1
+ $(inherited)
+
+ OTHER_CPLUSPLUSFLAGS
+
+ -DNS_BLOCK_ASSERTIONS=1
+ $(inherited)
+
+ OTHER_LDFLAGS
+
+ OTHER_LIBTOOLFLAGS
+
+ PRODUCT_NAME
+ $(TARGET_NAME)
+ PUBLIC_HEADERS_FOLDER_PATH
+ $(TARGET_NAME)
+ SDKROOT
+ iphoneos
+ SKIP_INSTALL
+ YES
+ VALIDATE_PRODUCT
+ YES
+
isa
- PBXBuildFile
+ XCBuildConfiguration
+ name
+ Release
- 90692384AE86654AF740CBA0
+ 8808B35EE72A9298BBA51786
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- UIButton+AFNetworking.h
+ AFURLSessionManager.m
path
- UIKit+AFNetworking/UIButton+AFNetworking.h
+ AFNetworking/AFURLSessionManager.m
+ sourceTree
+ <group>
+
+ 8874020BE170050E5657645F
+
+ children
+
+ AF470BA25B4AEDD098801E35
+ D21098B980D4B99BBE4EBCB0
+ 56F5234FA9A1B6FF50B9D373
+ 7D3DFDFFF6AA0103584F02A3
+ 3B7B0A7B452BFAC999ED51AF
+ F9BA8200CBE82E1229395A4D
+ C87C1D1B8FEAEBDCBE6C0C34
+ 6813759A3D4B289309C65CC8
+ A119B53B64AF254F3DAF7205
+ 31002E2D5A3FBDB190E2BA39
+ 7DDB2A7EFEFD7D66D7D642B4
+ 3B05348D9EADF7A7B1CBFCAF
+ 17491E9549DFECEE0C4A69AA
+
+ isa
+ PBXGroup
+ name
+ SWTableViewCell
+ path
+ SWTableViewCell
sourceTree
<group>
- 90E53DFD34C1281914AAC149
+ 8887F965AE8E56F4A4FE710A
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
+ name
+ SVProgressHUD.h
path
- Pods-SVWebViewController-dummy.m
+ SVProgressHUD/SVProgressHUD.h
sourceTree
<group>
- 912AE7405EF879CF2313E84E
-
- fileRef
- 3A2FD88F529A99A655D5C439
- isa
- PBXBuildFile
-
- 9165E3916BCF3741753508DC
+ 8A5EC5ADDF6D73BF84BB0439
buildActionMask
2147483647
files
- 53C5A15AD63D3476D0CF1531
+ 3AE2C49BD0132C3851A1A694
+ 57B4B477E70A079BAB1DAD37
+ 79848890F54B80767F70DD47
+ DD032B17044D0D8A8AC9BE55
+ 031749B0590F6DC7715C2614
+ A6FA98CBF0C13750E7030466
isa
- PBXFrameworksBuildPhase
+ PBXSourcesBuildPhase
runOnlyForDeploymentPostprocessing
0
- 91ACDD3A1590BBCBEDEBA6E4
+ 8ABA1813E160CE5AB0761F51
fileRef
- E62260C013619653C0C58B3D
+ DA2341FB44DCAD22E128F6E1
isa
PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
- 928FEC03396D35D183A65963
+ 8B6ED94C6DDA6FF25C0DC284
includeInIndex
1
isa
PBXFileReference
- lastKnownFileType
- sourcecode.c.h
name
- SDImageCache.h
+ SVWebViewControllerNext@2x.png
path
- SDWebImage/SDImageCache.h
+ SVWebViewController/SVWebViewController.bundle/SVWebViewControllerNext@2x.png
sourceTree
<group>
- 92947A2B649AE65D923B7C2E
-
- fileRef
- A2B106C048B78A5C6FBAA445
- isa
- PBXBuildFile
-
- 92D1A0BBD0D2B1EA721B084C
-
- fileRef
- 3C4B103B2DCE282C9C9EA571
- isa
- PBXBuildFile
-
- 9449B700FD78B567CDCE349E
+ 8BAFDC2A67AEA3220C90038A
includeInIndex
1
@@ -4291,13 +4388,13 @@
lastKnownFileType
sourcecode.c.objc
name
- AFURLSessionManager.m
+ UIScrollView+MJExtension.m
path
- AFNetworking/AFURLSessionManager.m
+ MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJExtension.m
sourceTree
<group>
- 94AC0364478A39DA51322B7F
+ 8C9C2943E986722994D47B81
includeInIndex
1
@@ -4305,40 +4402,72 @@
PBXFileReference
lastKnownFileType
sourcecode.c.h
+ name
+ MJRefresh.h
path
- Pods-SWTableViewCell-prefix.pch
+ MJRefreshExample/MJRefreshExample/MJRefresh/MJRefresh.h
sourceTree
<group>
- 94D197FD4192DB667B6E9A51
+ 8C9E7A7C0B30CF70BA821647
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- AFNetworkReachabilityManager.h
+ AFURLResponseSerialization.m
path
- AFNetworking/AFNetworkReachabilityManager.h
+ AFNetworking/AFURLResponseSerialization.m
sourceTree
<group>
- 968006EA8109A263FDFD3965
+ 8CD2CBEC6F0C20AD99BBD7CF
- includeInIndex
- 1
+ fileRef
+ 5E76D0C8307E26EBB442C355
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- path
- Pods-SDWebImage-dummy.m
- sourceTree
- <group>
+ PBXBuildFile
+
+ 8DA2B81909CC09D1C204671D
+
+ fileRef
+ 71DC522FCAFF9D6B38C8C1C8
+ isa
+ PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
- 96B82497505EF98401B50E1D
+ 8DD65D28966370811AABAD20
+
+ buildActionMask
+ 2147483647
+ files
+
+ 3D7A9C8AFBDC3B1B845A8354
+ EF5E0E26F44584766F139292
+ 2CC87DE56EE450C258CC1459
+ 2F17FEC1B706F2EB39E2DA5D
+ B8D26D6ED9F85684B440CE85
+ F6093A0B5FB224E073CD4A9C
+ 3A8CF03BEBB4C969DAE1A58C
+ F12F8D2E100E02797A7DC981
+ CC1C67ABB4980F1129CC1ABF
+ 80982DEADF8B2A5F2B26ADE1
+ 4D6DEC0914D9319015537959
+ C7F772BBF7D7D5FEA9CE8ABA
+
+ isa
+ PBXSourcesBuildPhase
+ runOnlyForDeploymentPostprocessing
+ 0
+
+ 8E04C8067D58420429F849D3
includeInIndex
1
@@ -4347,70 +4476,88 @@
lastKnownFileType
sourcecode.c.objc
name
- FMDatabaseAdditions.m
+ UIAlertView+AFNetworking.m
path
- src/fmdb/FMDatabaseAdditions.m
+ UIKit+AFNetworking/UIAlertView+AFNetworking.m
sourceTree
<group>
- 96E033AF44F3F21FB871FC01
+ 8E22501E03EA577E214D2510
fileRef
- 48558FEAC015CC0EFC37FD0A
+ C7C42E7283B016DEFAC91CF2
isa
PBXBuildFile
- 971BBE7FBC532FD0C3684E99
+ 8F962D84A0DA970EE6722D99
+ fileRef
+ 8887F965AE8E56F4A4FE710A
isa
- PBXFileReference
- lastKnownFileType
- wrapper.framework
- name
- MobileCoreServices.framework
- path
- Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/MobileCoreServices.framework
- sourceTree
- DEVELOPER_DIR
+ PBXBuildFile
- 97959B6C405A6219826BAFBE
+ 8FC00C6E9189DC2E8F15E968
fileRef
- 13A1A364A5506D8A8B3CB81E
+ 84FE7E230D2FC3B77F845364
isa
PBXBuildFile
- 983F9AB5B982D654799AA2AC
+ 8FE9BF5050F6FC295DDC2348
+
+ explicitFileType
+ archive.ar
+ includeInIndex
+ 0
+ isa
+ PBXFileReference
+ path
+ libPods-AFNetworking.a
+ sourceTree
+ BUILT_PRODUCTS_DIR
+
+ 9067AD6B1D75736FA573D6DC
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ text.xcconfig
+ path
+ Pods-SVProgressHUD-Private.xcconfig
+ sourceTree
+ <group>
+
+ 919F53AD7511E994A55FF852
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
name
- SWUtilityButtonTapGestureRecognizer.m
+ SVWebViewControllerNext.png
path
- SWTableViewCell/PodFiles/SWUtilityButtonTapGestureRecognizer.m
+ SVWebViewController/SVWebViewController.bundle/SVWebViewControllerNext.png
sourceTree
<group>
- 9878234455241C9D71D7D974
+ 91AA46A6041EC1643446D46C
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- UIImageView+HighlightedWebCache.m
+ SDWebImageCompat.h
path
- SDWebImage/UIImageView+HighlightedWebCache.m
+ SDWebImage/SDWebImageCompat.h
sourceTree
<group>
- 98D565C31B4E1BA8DEC0CD71
+ 92549F33A3CC9D6F1C3DF977
includeInIndex
1
@@ -4419,50 +4566,61 @@
lastKnownFileType
sourcecode.c.h
name
- UIKit+AFNetworking.h
+ AFHTTPRequestOperation.h
path
- UIKit+AFNetworking/UIKit+AFNetworking.h
+ AFNetworking/AFHTTPRequestOperation.h
sourceTree
<group>
- 9AAAE1957C330405FAFB9600
+ 93425A71C668EB5F6C7FA734
- buildActionMask
- 2147483647
- files
+ buildConfigurationList
+ A87A36A32F40E52DF1C88755
+ buildPhases
- C1DE7C20F35B97860D706B66
- 92947A2B649AE65D923B7C2E
- 77B2205754BF87FD2229D9F2
- F49B17CD5DB7BF511AD95FE0
- 7119A73FBB159384BD4FC17E
- 4AC5FA018B13C92FA6D66B86
- B58F93C474B2E8430B05D256
+ 3992094AFFDF7D4ECD978CFD
+ 3B74DE952620ECCD576D889F
+ F9D859481550E0BAAFC49F8D
+ buildRules
+
+ dependencies
+
isa
- PBXSourcesBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
+ PBXNativeTarget
+ name
+ Pods-SWTableViewCell
+ productName
+ Pods-SWTableViewCell
+ productReference
+ A6AD37D8B00F8892C4806CF5
+ productType
+ com.apple.product-type.library.static
+
+ 9381F7BB0A087C29FE037C45
+
+ fileRef
+ 91AA46A6041EC1643446D46C
+ isa
+ PBXBuildFile
- 9AC054684C72878BFD1354BD
+ 942FFA243C26063337A25F3C
+ explicitFileType
+ archive.ar
includeInIndex
- 1
+ 0
isa
PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- name
- AFNetworking.h
path
- AFNetworking/AFNetworking.h
+ libPods-MJRefresh.a
sourceTree
- <group>
+ BUILT_PRODUCTS_DIR
- 9B92478EA76FF9303AFAE57A
+ 94A0B58F2FAF9C1CBD3A7105
fileRef
- 283AD6CF440DCA9B38B0B53C
+ 06BFC4042CE34CA8CF550A8A
isa
PBXBuildFile
settings
@@ -4471,189 +4629,136 @@
-DOS_OBJECT_USE_OBJC=0
- 9C079AF4CCEEC69481F2BF10
+ 94D7806ED1B894F9AC3B12F3
+
+ fileRef
+ 59D7C7EEA8FE7A18F7242FAB
+ isa
+ PBXBuildFile
+
+ 95881FA09CB265E1553DA033
fileRef
- CA15D003C21CFCA2294BE5DB
+ AAC8341199D37437F70D1F22
isa
PBXBuildFile
- 9E3CADF4D34242891C1E4725
+ 95E7FC2311C4858528731495
+
+ fileRef
+ CADA31036DC6EAB82967ECA4
+ isa
+ PBXBuildFile
+
+ 95FF2B992C0CBC462AC1C0EF
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- FMDatabaseAdditions.h
+ MJRefreshHeader.m
path
- src/fmdb/FMDatabaseAdditions.h
+ MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshHeader.m
sourceTree
<group>
- 9E99E930712393BD264CF051
+ 9643F891DE5CA3D4BB9E89D6
- children
-
- A6D689B150BE62B7DB1AC767
- 1817BF46EC0C042C7D3CF340
- 5453F743BF1ED5091106B499
- 61E1D6F569824AE60EC953DC
- C834791111C32E19511470D4
- 283AD6CF440DCA9B38B0B53C
- 532E5B4150ED4F50E11BF0C7
- 23A7B732974BAA16EF4D4F5A
- 6A38B085018671A0ABB83BE1
- A8C971E5B6D1D6B34B5C9A1B
- E7926F44F6DD7675C4CAB292
- 573C8CC99C8641490B222C89
- AF131B236DD5AB2E742ADEF2
- F0DD19AA7C01867C1769DBE1
- 1DFAEC12DD2639335AF49ACE
- 2366FECF46A2354EC3AC77D5
- 771F20504BB303BB62A88285
- 856BC697A0DE727D2365B4B7
- 02E92DC83C62401C25C8913C
- BFCFD346B7D3A14BA3BA069B
- 7F71FB5470A79B51285AB34E
- AC1C5B4CE91F11AE998D64F6
- AADE27D38FBFB33465D0DA5F
- D0C3135DA2BA3C019BAF2DCF
- AD4719C2919B562DF3C80502
- 816C64CDAD58A599C6C8138B
- C932222C6328C3C84A162E3B
-
+ includeInIndex
+ 1
isa
- PBXGroup
- name
- Mantle
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
path
- Mantle
+ Pods-MJRefresh-dummy.m
sourceTree
<group>
- 9E9A3CEB47FB55E4697B447A
-
- fileRef
- 532E5B4150ED4F50E11BF0C7
- isa
- PBXBuildFile
-
- 9EC42BD6CC05E3F9835DEB3C
+ 968359B7EB1738752C894204
- children
-
- EA98CE819CDC3A1C462DA862
- A1B208310F6C031CA9568682
- 968006EA8109A263FDFD3965
- AA553D7A3D3565A545F3AD41
-
+ includeInIndex
+ 1
isa
- PBXGroup
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
name
- Support Files
+ EXTRuntimeExtensions.m
path
- ../Target Support Files/Pods-SDWebImage
+ Mantle/extobjc/EXTRuntimeExtensions.m
sourceTree
<group>
- 9EDC843AF94153F5B29AD001
-
- fileRef
- 58D5E10B6F509A4D289AC17C
- isa
- PBXBuildFile
-
- 9EFF5CE823942564335B0542
-
- fileRef
- 60142F5566216743E153E6C3
- isa
- PBXBuildFile
-
- 9F4821AF45F02268E44D0C1D
-
- fileRef
- 84E79296009B0C709F29B5C1
- isa
- PBXBuildFile
-
- 9F59D37382C8481C4A3543E6
+ 96D4C1202D853D89B6302975
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- SDWebImageDownloaderOperation.m
+ AFNetworkReachabilityManager.h
path
- SDWebImage/SDWebImageDownloaderOperation.m
+ AFNetworking/AFNetworkReachabilityManager.h
sourceTree
<group>
- 9F745963084D8E9E216392E2
+ 9793FB0E42D61D8B1B043E9E
buildActionMask
2147483647
files
- A361D7EB87257BFB39CD297F
- 24EDA1E60FA28D25D59006F1
- 67528D3EFE5A643ED1F3CCAA
- FC77BBB341E0605E8ED130FB
- B668271A16D47AF44F9BBCDA
- 9E9A3CEB47FB55E4697B447A
- 46F1E537458316428EEE009F
- 1AF9F27A2984FABBCD8BB35F
- 0BD156919664C48A35EEDBFE
- FED8EC57D00423F3832AA2A9
- 6947C9D1C5EE33C1D2440E0C
- 9FF9F40002ADF22BEF8BE069
- ABDDECC9891EA588DA2A5FF8
- E45958CE3CBD11F1707F441C
- 10BE1219154FDDC59F7E91E8
- 25CE073DBCD2584B257B39DA
- D79E955756AA01C364E52FE8
+ A83C6E63C79B9ED792ABFF3E
+ AB54FC747D875B8A17635816
+ 1B05BA6213F2E3EF2E531B9A
+ FDDB69BCEA27A3D2EAF6260B
+ 407F2DBBB74D2FF06D5771AC
+ C6DB08D280F61DACBF4D3AAD
+ 2DC4E99A25ACFE75B1E09DDB
+ 356BDA711A406B42A2AA21CC
+ 4E764B30FFA33E665E98C3E6
+ FBC45023CA1F858225841F8C
+ 4418C6B2F2D85DBBEE36DBA8
+ F4CF5630FC9C35B1117974BD
+ 98EBA7623C2CF142FEB7D884
+ 6B0A44465BD93D4F1D552675
+ C582AF7193A0AFF4C3D19FF8
+ 11DFAC007737F49E7E5B5404
+ 445F7BBCE78291EE57C4F84D
isa
- PBXHeadersBuildPhase
+ PBXSourcesBuildPhase
runOnlyForDeploymentPostprocessing
0
- 9F77207596AAC05C2F57FD7F
-
- includeInIndex
- 1
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- name
- SDWebImagePrefetcher.m
- path
- SDWebImage/SDWebImagePrefetcher.m
- sourceTree
- <group>
-
- 9F9C79DFE629562CA77CD2CA
+ 9804F4F62BBB5D18B11673E6
fileRef
- D09A62E8A6854C6E80B36152
+ 1222A867D3B095E6CAD064E1
isa
PBXBuildFile
- 9FA315080E627AB06418F4B4
+ 98484AC1E6D81524BCE077DD
- fileRef
- 8A081DC2D78B0C22A3B1CDDE
+ buildConfigurations
+
+ 205ED29E148DADEBC19D323C
+ B75CF58239E7FE5D406B27FC
+
+ defaultConfigurationIsVisible
+ 0
+ defaultConfigurationName
+ Release
isa
- PBXBuildFile
+ XCConfigurationList
- 9FB2FE90C5104F065B94608B
+ 988E655792186A580DD56ECC
includeInIndex
1
@@ -4662,54 +4767,76 @@
lastKnownFileType
sourcecode.c.h
name
- SVIndefiniteAnimatedView.h
+ MTLValueTransformer.h
path
- SVProgressHUD/SVIndefiniteAnimatedView.h
+ Mantle/MTLValueTransformer.h
sourceTree
<group>
- 9FF9F40002ADF22BEF8BE069
+ 98EBA7623C2CF142FEB7D884
fileRef
- 2366FECF46A2354EC3AC77D5
+ A01D6EC0BFF8D2AB4B0FEFB8
isa
PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
- A0BC09B6CD44A3EC41327140
+ 998AB0CB323A17E35BDC295B
- fileRef
- 7B237DEB99E4A1EC780BD565
+ children
+
+ 96D4C1202D853D89B6302975
+ 7E60A67D22F82309B3B23922
+
isa
- PBXBuildFile
+ PBXGroup
+ name
+ Reachability
+ sourceTree
+ <group>
- A0EB66A861D7F9BE99167595
+ 99C6EE30C94DB596F2FCEBE2
fileRef
- 595FC29ACF0D8E7894A124BF
+ F9BA8200CBE82E1229395A4D
isa
PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
- A110D8DB17AB6647C7795EBD
+ 9A3726BF835126AC3A215F0A
- includeInIndex
+ containerPortal
+ 81D979F3E87416F4B4516D5F
+ isa
+ PBXContainerItemProxy
+ proxyType
1
+ remoteGlobalIDString
+ 0CBA1F61EC68D9CDA478C899
+ remoteInfo
+ Pods-SDWebImage
+
+ 9A7DB548A2EAB74C183F19D1
+
+ buildActionMask
+ 2147483647
+ files
+
+ 1CC1A3DF4C98E3580B5C08DB
+ 28CA5C2956701A65270F4AD9
+ 9B72ABF3B1BEF1542A0BF493
+ F4A2225775DD229E3C63BECD
+ 62A986D71B8732D3ED882DA2
+
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- name
- UIButton+AFNetworking.m
- path
- UIKit+AFNetworking/UIButton+AFNetworking.m
- sourceTree
- <group>
+ PBXFrameworksBuildPhase
+ runOnlyForDeploymentPostprocessing
+ 0
- A19B2B715041A76AD22B7BB7
+ 9A7E479B26D9F0FDE6B70438
includeInIndex
1
@@ -4718,63 +4845,20 @@
lastKnownFileType
sourcecode.c.objc
name
- MJRefreshConst.m
+ SDWebImageManager.m
path
- MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshConst.m
+ SDWebImage/SDWebImageManager.m
sourceTree
<group>
- A19CDB887CB102ECC06C0723
+ 9B72ABF3B1BEF1542A0BF493
- baseConfigurationReference
- 11292E3DE8EF40F9DCBCD526
- buildSettings
-
- ALWAYS_SEARCH_USER_PATHS
- NO
- COPY_PHASE_STRIP
- YES
- DSTROOT
- /tmp/xcodeproj.dst
- GCC_PRECOMPILE_PREFIX_HEADER
- YES
- GCC_PREFIX_HEADER
- Target Support Files/Pods-MJRefresh/Pods-MJRefresh-prefix.pch
- INSTALL_PATH
- $(BUILT_PRODUCTS_DIR)
- IPHONEOS_DEPLOYMENT_TARGET
- 7.0
- OTHER_CFLAGS
-
- -DNS_BLOCK_ASSERTIONS=1
- $(inherited)
-
- OTHER_CPLUSPLUSFLAGS
-
- -DNS_BLOCK_ASSERTIONS=1
- $(inherited)
-
- OTHER_LDFLAGS
-
- OTHER_LIBTOOLFLAGS
-
- PRODUCT_NAME
- $(TARGET_NAME)
- PUBLIC_HEADERS_FOLDER_PATH
- $(TARGET_NAME)
- SDKROOT
- iphoneos
- SKIP_INSTALL
- YES
- VALIDATE_PRODUCT
- YES
-
+ fileRef
+ F684B190D03659D4947FEA45
isa
- XCBuildConfiguration
- name
- Release
+ PBXBuildFile
- A1B208310F6C031CA9568682
+ 9C746065011B9B8E702645AE
includeInIndex
1
@@ -4783,93 +4867,24 @@
lastKnownFileType
text.xcconfig
path
- Pods-SDWebImage-Private.xcconfig
+ Pods-AFNetworking-Private.xcconfig
sourceTree
<group>
- A212E3E719279B15D99358D7
-
- containerPortal
- 003A31C6AADD74836B88341F
- isa
- PBXContainerItemProxy
- proxyType
- 1
- remoteGlobalIDString
- 0E44B521E203EC4F111815E4
- remoteInfo
- Pods-SWTableViewCell
-
- A25EAE9D801AB760A4747E4B
-
- baseConfigurationReference
- E8D5D18DAA535CA6B08AA393
- buildSettings
-
- ALWAYS_SEARCH_USER_PATHS
- NO
- COPY_PHASE_STRIP
- NO
- DSTROOT
- /tmp/xcodeproj.dst
- GCC_DYNAMIC_NO_PIC
- NO
- GCC_OPTIMIZATION_LEVEL
- 0
- GCC_PRECOMPILE_PREFIX_HEADER
- YES
- GCC_PREFIX_HEADER
- Target Support Files/Pods-SVWebViewController/Pods-SVWebViewController-prefix.pch
- GCC_PREPROCESSOR_DEFINITIONS
-
- DEBUG=1
- $(inherited)
-
- GCC_SYMBOLS_PRIVATE_EXTERN
- NO
- INSTALL_PATH
- $(BUILT_PRODUCTS_DIR)
- IPHONEOS_DEPLOYMENT_TARGET
- 7.0
- OTHER_LDFLAGS
-
- OTHER_LIBTOOLFLAGS
-
- PRODUCT_NAME
- $(TARGET_NAME)
- PUBLIC_HEADERS_FOLDER_PATH
- $(TARGET_NAME)
- SDKROOT
- iphoneos
- SKIP_INSTALL
- YES
-
- isa
- XCBuildConfiguration
- name
- Debug
-
- A2B106C048B78A5C6FBAA445
+ 9CEFCB11A62BDBC8D6BA730C
+ explicitFileType
+ archive.ar
includeInIndex
- 1
+ 0
isa
PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
path
- Pods-SWTableViewCell-dummy.m
+ libPods-Mantle.a
sourceTree
- <group>
-
- A2EBB8311F6F713C23AA9103
-
- fileRef
- F19082954117D5EC4CBF111A
- isa
- PBXBuildFile
+ BUILT_PRODUCTS_DIR
- A32AD2139187CB1F5F2B6247
+ 9D641BF01B9DCB3759BB7650
includeInIndex
1
@@ -4878,100 +4893,82 @@
lastKnownFileType
sourcecode.c.h
name
- SWLongPressGestureRecognizer.h
+ MTLJSONAdapter.h
path
- SWTableViewCell/PodFiles/SWLongPressGestureRecognizer.h
+ Mantle/MTLJSONAdapter.h
sourceTree
<group>
- A3516881B3D6F981B73AC538
+ 9DE5B8BAF6520E75E0ECD2A3
children
- FA9D9250626EDCE049F74048
- 13A1A364A5506D8A8B3CB81E
- 70F7A8DB0E39B67802CA7A76
- 846C466F2240C4C93CD6C24C
- AC6F1AA84590ACFF61BAAD60
- 48558FEAC015CC0EFC37FD0A
- D9813C4AEDC5894EE1B3451F
- C32A44B3BB593CF09E391F55
- BD9CA4ED0FDE48B5335FA601
- CA15D003C21CFCA2294BE5DB
- 7398CA0C7FAD6B1A8E5B3A95
- AE42B8105AFFE0B288D61B38
+ 92549F33A3CC9D6F1C3DF977
+ BCE701251DF69F3F6F83B283
+ AD8E2E838E28925DC440CEB5
+ 53CF4E2FFFD543ABD0F1621C
+ 836D5E6C17DB983DF1634A69
+ 516C932F9D2EA6FCFA72DA5C
isa
PBXGroup
name
- SVWebViewController
- path
- SVWebViewController
+ NSURLConnection
sourceTree
<group>
- A361D7EB87257BFB39CD297F
-
- fileRef
- 633433250CA4F0951A356573
- isa
- PBXBuildFile
-
- A3A92429628C08F12D3FC1CD
+ 9E016601CA43D1C5C8904B27
fileRef
- E32EAF52CDE8541AAA86F6A0
+ 8C9C2943E986722994D47B81
isa
PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
- A3E886CEC48C491886768370
+ 9E1F1FBB05AEABE72CE1EB2A
fileRef
- 968006EA8109A263FDFD3965
+ 60A25E261550AFF0655E9701
isa
PBXBuildFile
- A566AAD0BC4F7B6641A8C759
+ 9E9D0D9F98C6F64688498FA0
- fileRef
- 10D51B68691D31108009BE93
+ includeInIndex
+ 1
isa
- PBXBuildFile
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
+ name
+ MJRefreshLegendHeader.m
+ path
+ MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshLegendHeader.m
+ sourceTree
+ <group>
- A6D689B150BE62B7DB1AC767
+ A01D6EC0BFF8D2AB4B0FEFB8
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- MTLJSONAdapter.h
+ NSError+MTLModelException.m
path
- Mantle/MTLJSONAdapter.h
+ Mantle/NSError+MTLModelException.m
sourceTree
<group>
- A6EA95925C726D0A8F6D6DA1
+ A087CA9E108E9E21024C9172
- containerPortal
- 003A31C6AADD74836B88341F
+ fileRef
+ 86EB9A08B9B6E1267BD57145
isa
- PBXContainerItemProxy
- proxyType
- 1
- remoteGlobalIDString
- F5AD41E8F4E3CBFFE9D0A6AD
- remoteInfo
- Pods-FMDB
+ PBXBuildFile
- A735B515C1DCF4D2370CAF9A
+ A119B53B64AF254F3DAF7205
includeInIndex
1
@@ -4979,25 +4976,41 @@
PBXFileReference
lastKnownFileType
sourcecode.c.h
+ name
+ SWUtilityButtonTapGestureRecognizer.h
path
- Pods-SVWebViewController-prefix.pch
+ SWTableViewCell/PodFiles/SWUtilityButtonTapGestureRecognizer.h
sourceTree
<group>
- A7755A9FB17EA678C37DCD95
+ A13AB7B838A1874D45D4B857
+
+ fileRef
+ BEA878B43A1467881A0B05D9
+ isa
+ PBXBuildFile
+
+ A30E202D51051669B6D9A384
includeInIndex
1
isa
PBXFileReference
- lastKnownFileType
- sourcecode.c.h
+ name
+ SVWebViewControllerActivityChrome@2x.png
path
- Pods-MJRefresh-prefix.pch
+ SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome@2x.png
sourceTree
<group>
- A8C971E5B6D1D6B34B5C9A1B
+ A32C110D789B8BD8916FDEC8
+
+ fileRef
+ 1B9EB26BF91493E21387BF73
+ isa
+ PBXBuildFile
+
+ A46A12A72CF0AD1763E44FB6
includeInIndex
1
@@ -5006,13 +5019,13 @@
lastKnownFileType
sourcecode.c.objc
name
- MTLReflection.m
+ EXTScope.m
path
- Mantle/MTLReflection.m
+ Mantle/extobjc/EXTScope.m
sourceTree
<group>
- A95D82B9D1D2BEFE3D2DAB00
+ A46D26FE67677E1BCCEC9648
includeInIndex
1
@@ -5020,12 +5033,71 @@
PBXFileReference
lastKnownFileType
sourcecode.c.objc
+ name
+ UIButton+AFNetworking.m
path
- Pods-Mantle-dummy.m
+ UIKit+AFNetworking/UIButton+AFNetworking.m
sourceTree
<group>
- A9649B3D73F213DD8CAF3844
+ A5C8556A075FD35AD30BACD1
+
+ fileRef
+ 4D6BEC56F9F00A366232143C
+ isa
+ PBXBuildFile
+
+ A5DC01003F4419E2230FF9A9
+
+ baseConfigurationReference
+ 766E6FD13340EAC7CA2A74C0
+ buildSettings
+
+ ALWAYS_SEARCH_USER_PATHS
+ NO
+ COPY_PHASE_STRIP
+ YES
+ DSTROOT
+ /tmp/xcodeproj.dst
+ GCC_PRECOMPILE_PREFIX_HEADER
+ YES
+ GCC_PREFIX_HEADER
+ Target Support Files/Pods-Shimmer/Pods-Shimmer-prefix.pch
+ INSTALL_PATH
+ $(BUILT_PRODUCTS_DIR)
+ IPHONEOS_DEPLOYMENT_TARGET
+ 7.0
+ OTHER_CFLAGS
+
+ -DNS_BLOCK_ASSERTIONS=1
+ $(inherited)
+
+ OTHER_CPLUSPLUSFLAGS
+
+ -DNS_BLOCK_ASSERTIONS=1
+ $(inherited)
+
+ OTHER_LDFLAGS
+
+ OTHER_LIBTOOLFLAGS
+
+ PRODUCT_NAME
+ $(TARGET_NAME)
+ PUBLIC_HEADERS_FOLDER_PATH
+ $(TARGET_NAME)
+ SDKROOT
+ iphoneos
+ SKIP_INSTALL
+ YES
+ VALIDATE_PRODUCT
+ YES
+
+ isa
+ XCBuildConfiguration
+ name
+ Release
+
+ A60FF7B612E384CD0FBBC028
includeInIndex
1
@@ -5034,30 +5106,64 @@
lastKnownFileType
text.xcconfig
path
- Pods-FMDB.xcconfig
+ Pods.release.xcconfig
sourceTree
<group>
- A98547DB16A7BA47C179FA8D
+ A6AD37D8B00F8892C4806CF5
- children
+ explicitFileType
+ archive.ar
+ includeInIndex
+ 0
+ isa
+ PBXFileReference
+ path
+ libPods-SWTableViewCell.a
+ sourceTree
+ BUILT_PRODUCTS_DIR
+
+ A6FA98CBF0C13750E7030466
+
+ fileRef
+ 25A0A19A077EC9E251FBD688
+ isa
+ PBXBuildFile
+
+ A74B2B655F7C0D0312999B5C
+
+ fileRef
+ 4714BA30C5BDCD069A68421B
+ isa
+ PBXBuildFile
+
+ A83C6E63C79B9ED792ABFF3E
+
+ fileRef
+ 968359B7EB1738752C894204
+ isa
+ PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
+
+ A87A36A32F40E52DF1C88755
+
+ buildConfigurations
- 292F5F1319A89AE506A962C2
- F0D0B8FA1F237AF39207A58C
- 7EABDBD965900014161BECCC
- 971BBE7FBC532FD0C3684E99
- F5FB40E1554F5686F97998FA
- D2F8B867A02B15A8D833E6E7
- 15C57B0A0D754AA9967330DF
+ 853955DAA548D7FF44BCEE0F
+ 4877370E028EB1D55797780F
+ defaultConfigurationIsVisible
+ 0
+ defaultConfigurationName
+ Release
isa
- PBXGroup
- name
- iOS
- sourceTree
- <group>
+ XCConfigurationList
- AA553D7A3D3565A545F3AD41
+ A90F74085A3775EED69FD854
includeInIndex
1
@@ -5065,146 +5171,162 @@
PBXFileReference
lastKnownFileType
sourcecode.c.h
+ name
+ FBShimmeringView.h
path
- Pods-SDWebImage-prefix.pch
+ FBShimmering/FBShimmeringView.h
sourceTree
<group>
- AADD81544137DB9F341D6ED3
+ A93E13864D80CA2BBDF0CE3B
+ fileRef
+ 11C73DBC7E4CD70B20E5C5F8
isa
- PBXTargetDependency
- name
- Pods-SVProgressHUD
- target
- 6736EF81F571346B01E63AAB
- targetProxy
- 5CEA9DDB4661A6FC3DC94DC6
+ PBXBuildFile
- AADE27D38FBFB33465D0DA5F
+ AAC8341199D37437F70D1F22
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- NSValueTransformer+MTLInversionAdditions.m
+ MJRefreshHeader.h
path
- Mantle/NSValueTransformer+MTLInversionAdditions.m
+ MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshHeader.h
sourceTree
<group>
- AB1DEC2C8FBB36DEECEF04E0
+ AB54FC747D875B8A17635816
fileRef
- FA9D9250626EDCE049F74048
+ A46A12A72CF0AD1763E44FB6
isa
PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
+
+ AB575AA86CF058702BDADE33
+
+ isa
+ PBXTargetDependency
+ name
+ Pods-Mantle
+ target
+ 577435415A323B682400D54D
+ targetProxy
+ CD4A5D420DBD6E66570EB0DF
- ABDDECC9891EA588DA2A5FF8
+ ABB9619998DACD77052F7D09
fileRef
- 856BC697A0DE727D2365B4B7
+ 202F6DB433134889BAACCDDB
isa
PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
- AC1C5B4CE91F11AE998D64F6
+ ACB10044602E091306D20304
includeInIndex
1
isa
PBXFileReference
- lastKnownFileType
- sourcecode.c.h
name
- NSValueTransformer+MTLInversionAdditions.h
+ SVWebViewControllerActivityChrome-iPad.png
path
- Mantle/NSValueTransformer+MTLInversionAdditions.h
+ SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome-iPad.png
sourceTree
<group>
- AC6F1AA84590ACFF61BAAD60
+ AD0CEA85A2185B48B09C220B
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
- name
- SVWebViewControllerActivity.h
+ text.xcconfig
path
- SVWebViewController/UIActivities/SVWebViewControllerActivity.h
+ Pods-SDWebImage.xcconfig
sourceTree
<group>
- AD4009A3CA3371D1F8C780E5
+ AD5F16EA93C42C324A1A2854
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
+ name
+ UIScrollView+MJExtension.h
path
- Pods-FMDB-dummy.m
+ MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJExtension.h
sourceTree
<group>
- AD4719C2919B562DF3C80502
+ AD8E2E838E28925DC440CEB5
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- NSValueTransformer+MTLPredefinedTransformerAdditions.m
+ AFHTTPRequestOperationManager.h
path
- Mantle/NSValueTransformer+MTLPredefinedTransformerAdditions.m
+ AFNetworking/AFHTTPRequestOperationManager.h
sourceTree
<group>
- AD73A79FDD2F245D4F40C14B
-
- isa
- PBXTargetDependency
- name
- Pods-FMDB
- target
- F5AD41E8F4E3CBFFE9D0A6AD
- targetProxy
- A6EA95925C726D0A8F6D6DA1
-
- ADC6D3BD671FB020D4E165E1
-
- fileRef
- D9813C4AEDC5894EE1B3451F
- isa
- PBXBuildFile
-
- AE42B8105AFFE0B288D61B38
+ AE9AE9605C535FD64A7E4136
children
- 5A89A95B50754A00C6F8883D
- E8D5D18DAA535CA6B08AA393
- 90E53DFD34C1281914AAC149
- A735B515C1DCF4D2370CAF9A
+ 4C74FDC86EA41CE2920EF95B
+ 2610D7C01A280C95688E34FA
+ 6A9D880FB2B5B01B5C3566A4
+ 354547649D0B305705F9A7B2
+ 58024541C4A799EB0EBD4A64
+ 15FBF202A50ECA5AE8098F25
+ 8874020BE170050E5657645F
+ E19E6C14D588684CC18224AE
isa
PBXGroup
name
- Support Files
- path
- ../Target Support Files/Pods-SVWebViewController
+ Pods
sourceTree
<group>
- AF131B236DD5AB2E742ADEF2
+ AEE0860D1763213A0AFE6929
+
+ buildActionMask
+ 2147483647
+ files
+
+ 30595C98C9115B602BDC4BCB
+ A74B2B655F7C0D0312999B5C
+ CD8984A1672C44CD6FA8B455
+
+ isa
+ PBXSourcesBuildPhase
+ runOnlyForDeploymentPostprocessing
+ 0
+
+ AF470BA25B4AEDD098801E35
includeInIndex
1
@@ -5212,71 +5334,14 @@
PBXFileReference
lastKnownFileType
sourcecode.c.h
- name
- Mantle.h
- path
- Mantle/Mantle.h
- sourceTree
- <group>
-
- AF263AC92D39C068F246DF63
-
- baseConfigurationReference
- E3C180F70C4829EC3E7C8741
- buildSettings
-
- ALWAYS_SEARCH_USER_PATHS
- NO
- COPY_PHASE_STRIP
- YES
- DSTROOT
- /tmp/xcodeproj.dst
- GCC_PRECOMPILE_PREFIX_HEADER
- YES
- GCC_PREFIX_HEADER
- Target Support Files/Pods-FMDB/Pods-FMDB-prefix.pch
- INSTALL_PATH
- $(BUILT_PRODUCTS_DIR)
- IPHONEOS_DEPLOYMENT_TARGET
- 7.0
- OTHER_CFLAGS
-
- -DNS_BLOCK_ASSERTIONS=1
- $(inherited)
-
- OTHER_CPLUSPLUSFLAGS
-
- -DNS_BLOCK_ASSERTIONS=1
- $(inherited)
-
- OTHER_LDFLAGS
-
- OTHER_LIBTOOLFLAGS
-
- PRODUCT_NAME
- $(TARGET_NAME)
- PUBLIC_HEADERS_FOLDER_PATH
- $(TARGET_NAME)
- SDKROOT
- iphoneos
- SKIP_INSTALL
- YES
- VALIDATE_PRODUCT
- YES
-
- isa
- XCBuildConfiguration
- name
- Release
-
- B0F31E9D675CDD8EF475F4A7
-
- fileRef
- 43B8A0C73CAAAADDEBCE7C0C
- isa
- PBXBuildFile
+ name
+ NSMutableArray+SWUtilityButtons.h
+ path
+ SWTableViewCell/PodFiles/NSMutableArray+SWUtilityButtons.h
+ sourceTree
+ <group>
- B2DFB8ABE3C361564605FC09
+ AF5C6DD26F6C33671E226570
includeInIndex
1
@@ -5285,92 +5350,43 @@
lastKnownFileType
sourcecode.c.h
name
- SWTableViewCell.h
+ UIImage+MultiFormat.h
path
- SWTableViewCell/PodFiles/SWTableViewCell.h
+ SDWebImage/UIImage+MultiFormat.h
sourceTree
<group>
- B2FE89B302D990CFC2393FFB
+ AF9098952D1C698BC780EB65
- children
+ buildActionMask
+ 2147483647
+ files
- 322D65FFB3319CBE9B35DD56
- 9EC42BD6CC05E3F9835DEB3C
+ 46A720A0E12B13557BBA7BA3
+ 15BB52D8A36F9448177D9DF6
+ 8CD2CBEC6F0C20AD99BBD7CF
isa
- PBXGroup
- name
- SDWebImage
- path
- SDWebImage
- sourceTree
- <group>
+ PBXSourcesBuildPhase
+ runOnlyForDeploymentPostprocessing
+ 0
- B3654B8D5A85FC44A7A6B1FE
+ B113FB03415126F4B88F2139
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- text.xcconfig
+ sourcecode.c.h
+ name
+ UIKit+AFNetworking.h
path
- Pods-MJRefresh.xcconfig
+ UIKit+AFNetworking/UIKit+AFNetworking.h
sourceTree
<group>
- B37092B574E47123FA62F48A
-
- baseConfigurationReference
- 585F33F75FFBDB5A2D635BC5
- buildSettings
-
- ALWAYS_SEARCH_USER_PATHS
- NO
- COPY_PHASE_STRIP
- YES
- DSTROOT
- /tmp/xcodeproj.dst
- GCC_PRECOMPILE_PREFIX_HEADER
- YES
- GCC_PREFIX_HEADER
- Target Support Files/Pods-AFNetworking/Pods-AFNetworking-prefix.pch
- INSTALL_PATH
- $(BUILT_PRODUCTS_DIR)
- IPHONEOS_DEPLOYMENT_TARGET
- 7.0
- OTHER_CFLAGS
-
- -DNS_BLOCK_ASSERTIONS=1
- $(inherited)
-
- OTHER_CPLUSPLUSFLAGS
-
- -DNS_BLOCK_ASSERTIONS=1
- $(inherited)
-
- OTHER_LDFLAGS
-
- OTHER_LIBTOOLFLAGS
-
- PRODUCT_NAME
- $(TARGET_NAME)
- PUBLIC_HEADERS_FOLDER_PATH
- $(TARGET_NAME)
- SDKROOT
- iphoneos
- SKIP_INSTALL
- YES
- VALIDATE_PRODUCT
- YES
-
- isa
- XCBuildConfiguration
- name
- Release
-
- B3C85AC9AFD3294AE7C56106
+ B1F4FF21E45DFB02CAA6DBFF
includeInIndex
1
@@ -5379,126 +5395,72 @@
lastKnownFileType
sourcecode.c.h
name
- SDWebImageDecoder.h
+ NSDictionary+MTLManipulationAdditions.h
path
- SDWebImage/SDWebImageDecoder.h
+ Mantle/NSDictionary+MTLManipulationAdditions.h
sourceTree
<group>
- B49FB948DC12B27713617596
+ B27A22B747AB549ED4F93034
- children
-
- D9CF805123DCF31BD815B4BB
- 290221507373808ABAA4054B
- 2D3A6D4FA7D703DF6C8A7450
- 9449B700FD78B567CDCE349E
-
+ includeInIndex
+ 1
isa
- PBXGroup
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
name
- NSURLSession
+ AFHTTPSessionManager.h
+ path
+ AFNetworking/AFHTTPSessionManager.h
sourceTree
<group>
- B58F93C474B2E8430B05D256
-
- fileRef
- F3E77A78BED9A830D2670005
- isa
- PBXBuildFile
-
- B5CE0321A8AEFC3F5FA0DF70
-
- fileRef
- 1890A9018AFB550869401948
- isa
- PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
-
- B668271A16D47AF44F9BBCDA
-
- fileRef
- 5453F743BF1ED5091106B499
- isa
- PBXBuildFile
-
- B75F517882BF000A53EC59B3
-
- buildActionMask
- 2147483647
- files
-
- DDA12FA0A07A90423DAC2DAF
- 6D3B22115589829E7FEAC2D2
-
- isa
- PBXFrameworksBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
-
- B7B2983751AA2DB871BE4F87
+ B3A659BBB79CFA97EFB8C1B4
buildActionMask
2147483647
files
- 83C50DBF98466D8F993D6269
- 5DF09EA3510F7C19B9A4DA3C
- FE4113033936F46AED1AC492
- E047647F1042A54423864302
- 245A7D5B09274802299A5413
- 0BD65AA041B8332119344140
- 7D4286C5720F98FA2A3F8A35
- D059787EBF44D5A0BC02F87F
+ A5C8556A075FD35AD30BACD1
+ 75EB3E8632BA17AD3DB6A98D
+ D4597DB6B6075E95AAE77F0F
isa
PBXHeadersBuildPhase
runOnlyForDeploymentPostprocessing
0
- B81737201F183B1D172A4B4D
-
- fileRef
- F0D0B8FA1F237AF39207A58C
- isa
- PBXBuildFile
-
- B9011D79C925C7A071C4D24A
+ B4D86A148E61EDCE85A2F9CF
baseConfigurationReference
- 585F33F75FFBDB5A2D635BC5
+ 9067AD6B1D75736FA573D6DC
buildSettings
ALWAYS_SEARCH_USER_PATHS
NO
COPY_PHASE_STRIP
- NO
+ YES
DSTROOT
/tmp/xcodeproj.dst
- GCC_DYNAMIC_NO_PIC
- NO
- GCC_OPTIMIZATION_LEVEL
- 0
GCC_PRECOMPILE_PREFIX_HEADER
YES
GCC_PREFIX_HEADER
- Target Support Files/Pods-AFNetworking/Pods-AFNetworking-prefix.pch
- GCC_PREPROCESSOR_DEFINITIONS
-
- DEBUG=1
- $(inherited)
-
- GCC_SYMBOLS_PRIVATE_EXTERN
- NO
+ Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-prefix.pch
INSTALL_PATH
$(BUILT_PRODUCTS_DIR)
IPHONEOS_DEPLOYMENT_TARGET
7.0
+ OTHER_CFLAGS
+
+ -DNS_BLOCK_ASSERTIONS=1
+ $(inherited)
+
+ OTHER_CPLUSPLUSFLAGS
+
+ -DNS_BLOCK_ASSERTIONS=1
+ $(inherited)
+
OTHER_LDFLAGS
OTHER_LIBTOOLFLAGS
@@ -5511,41 +5473,30 @@
iphoneos
SKIP_INSTALL
YES
+ VALIDATE_PRODUCT
+ YES
isa
XCBuildConfiguration
name
- Debug
-
- B9F5BA86ACFC81B344D15D30
-
- includeInIndex
- 1
- isa
- PBXFileReference
- lastKnownFileType
- text.xcconfig
- path
- Pods-Mantle-Private.xcconfig
- sourceTree
- <group>
+ Release
- BB46AB577CB11E2DEC496B53
+ B545404BB9E4DE3AFE749CBB
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- UIAlertView+AFNetworking.h
+ SDWebImageCompat.m
path
- UIKit+AFNetworking/UIAlertView+AFNetworking.h
+ SDWebImage/SDWebImageCompat.m
sourceTree
<group>
- BB9E6E4F4B05385705EB97C0
+ B5A085F43F7BA05E99922AEF
includeInIndex
1
@@ -5554,28 +5505,20 @@
lastKnownFileType
sourcecode.c.objc
name
- UIWebView+AFNetworking.m
+ NSValueTransformer+MTLInversionAdditions.m
path
- UIKit+AFNetworking/UIWebView+AFNetworking.m
+ Mantle/NSValueTransformer+MTLInversionAdditions.m
sourceTree
<group>
- BC949D87330F6EC5E34A3352
+ B61350AA0E1ECAE94B5C03A3
- includeInIndex
- 1
+ fileRef
+ 7B77F3265638135D167796E4
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- name
- UIImageView+WebCache.m
- path
- SDWebImage/UIImageView+WebCache.m
- sourceTree
- <group>
+ PBXBuildFile
- BD7A57AABDA83E720552763E
+ B62A0CCA6FB761F67C50FD6C
includeInIndex
1
@@ -5584,13 +5527,13 @@
lastKnownFileType
sourcecode.c.objc
name
- AFURLConnectionOperation.m
+ SDWebImageDecoder.m
path
- AFNetworking/AFURLConnectionOperation.m
+ SDWebImage/SDWebImageDecoder.m
sourceTree
<group>
- BD9CA4ED0FDE48B5335FA601
+ B6D1E6F496CA960B50C331AD
includeInIndex
1
@@ -5599,138 +5542,125 @@
lastKnownFileType
sourcecode.c.h
name
- SVWebViewControllerActivitySafari.h
+ MJRefreshLegendHeader.h
path
- SVWebViewController/UIActivities/Safari/SVWebViewControllerActivitySafari.h
+ MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshLegendHeader.h
sourceTree
<group>
- BDD171D88E04245FF41CFF78
-
- buildActionMask
- 2147483647
- files
-
- 640D32B00E7CA013FAA9F891
- 6C469821D18CEA22E80ACA5E
- 720BC6CAA4ECD29F66CE897D
- 015D98E4D31C2E29C4FB9DBA
- D0A9652EBFFEC41C2F239263
- 9EDC843AF94153F5B29AD001
-
- isa
- PBXHeadersBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
-
- BDD54D59F9F168C7CDC3C286
+ B75CF58239E7FE5D406B27FC
- includeInIndex
- 1
+ baseConfigurationReference
+ 9C746065011B9B8E702645AE
+ buildSettings
+
+ ALWAYS_SEARCH_USER_PATHS
+ NO
+ COPY_PHASE_STRIP
+ YES
+ DSTROOT
+ /tmp/xcodeproj.dst
+ GCC_PRECOMPILE_PREFIX_HEADER
+ YES
+ GCC_PREFIX_HEADER
+ Target Support Files/Pods-AFNetworking/Pods-AFNetworking-prefix.pch
+ INSTALL_PATH
+ $(BUILT_PRODUCTS_DIR)
+ IPHONEOS_DEPLOYMENT_TARGET
+ 7.0
+ OTHER_CFLAGS
+
+ -DNS_BLOCK_ASSERTIONS=1
+ $(inherited)
+
+ OTHER_CPLUSPLUSFLAGS
+
+ -DNS_BLOCK_ASSERTIONS=1
+ $(inherited)
+
+ OTHER_LDFLAGS
+
+ OTHER_LIBTOOLFLAGS
+
+ PRODUCT_NAME
+ $(TARGET_NAME)
+ PUBLIC_HEADERS_FOLDER_PATH
+ $(TARGET_NAME)
+ SDKROOT
+ iphoneos
+ SKIP_INSTALL
+ YES
+ VALIDATE_PRODUCT
+ YES
+
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
+ XCBuildConfiguration
name
- UIImage+MultiFormat.m
- path
- SDWebImage/UIImage+MultiFormat.m
- sourceTree
- <group>
+ Release
- BE940E795DD463ACED5B538C
+ B8B5CBC18C4215410E396EBB
fileRef
- A110D8DB17AB6647C7795EBD
+ B62A0CCA6FB761F67C50FD6C
isa
PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
- BE9EDA04D687D70B682E1E0C
+ B8D26D6ED9F85684B440CE85
fileRef
- 0E0B9761485C54F60690139C
+ 3DA0E29B98E2DCECB7129EED
isa
PBXBuildFile
- BEC66FA7BE915660404F69F2
+ BAFE0E98CDCE41DE001C1B4A
- buildConfigurations
-
- 86F73289E11C480C16D33BCB
- 662F6BC68D35264D3A2E14DF
-
- defaultConfigurationIsVisible
- 0
- defaultConfigurationName
- Release
+ fileRef
+ 8E04C8067D58420429F849D3
isa
- XCConfigurationList
+ PBXBuildFile
- BF9582E6D1D11AAE4C82790C
+ BBB4F0C42599E9EC3619BD9D
- includeInIndex
- 1
+ fileRef
+ 509DA73C428A64C02BF0B75C
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
- name
- NSMutableArray+SWUtilityButtons.m
- path
- SWTableViewCell/PodFiles/NSMutableArray+SWUtilityButtons.m
- sourceTree
- <group>
+ PBXBuildFile
- BFA9BA48E845CDA5D016018D
+ BC3B5779BE0E0FCD39A14E06
fileRef
- F5FB40E1554F5686F97998FA
+ 56F5234FA9A1B6FF50B9D373
isa
PBXBuildFile
- BFCFD346B7D3A14BA3BA069B
+ BC4BFA3BB3B2500FA7071308
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- NSObject+MTLComparisonAdditions.h
- path
- Mantle/NSObject+MTLComparisonAdditions.h
- sourceTree
- <group>
-
- C0ECB4C8D31A24B2C3CF9E1F
-
- includeInIndex
- 1
- isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
+ UIView+WebCacheOperation.m
path
- Pods-environment.h
+ SDWebImage/UIView+WebCacheOperation.m
sourceTree
<group>
- C1DE7C20F35B97860D706B66
+ BC5EAF24594607E38A7636C1
fileRef
- BF9582E6D1D11AAE4C82790C
+ 244FECFEBCA55B4B22B48100
isa
PBXBuildFile
- C2F2F561C27931B0CFA6A5AD
-
- fileRef
- 34A0A9B27EF8487D6B85D039
- isa
- PBXBuildFile
-
- C32A44B3BB593CF09E391F55
+ BCE701251DF69F3F6F83B283
includeInIndex
1
@@ -5739,32 +5669,13 @@
lastKnownFileType
sourcecode.c.objc
name
- SVWebViewControllerActivityChrome.m
+ AFHTTPRequestOperation.m
path
- SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome.m
+ AFNetworking/AFHTTPRequestOperation.m
sourceTree
<group>
- C3756A16C38B7B1455914F49
-
- fileRef
- 7F71FB5470A79B51285AB34E
- isa
- PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
-
- C3A33DB3AF5947A220C22474
-
- fileRef
- E1AD240F7028E1A092DCBEDC
- isa
- PBXBuildFile
-
- C50CBBB3320CBFC5FA8EA34D
+ BD21D8D91FCD26B8FAA257D1
includeInIndex
1
@@ -5773,20 +5684,20 @@
lastKnownFileType
sourcecode.c.h
name
- AFNetworkActivityIndicatorManager.h
+ MJRefreshLegendFooter.h
path
- UIKit+AFNetworking/AFNetworkActivityIndicatorManager.h
+ MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshLegendFooter.h
sourceTree
<group>
- C55BDF5794C4C27E7A69A131
+ BDDAD42C906683E324BA0911
fileRef
- 575254127992AC3095637C85
+ 96D4C1202D853D89B6302975
isa
PBXBuildFile
- C56F74D0AAB1C57653DA7F7A
+ BEA878B43A1467881A0B05D9
includeInIndex
1
@@ -5795,13 +5706,13 @@
lastKnownFileType
sourcecode.c.h
name
- SWUtilityButtonTapGestureRecognizer.h
+ AFURLRequestSerialization.h
path
- SWTableViewCell/PodFiles/SWUtilityButtonTapGestureRecognizer.h
+ AFNetworking/AFURLRequestSerialization.h
sourceTree
<group>
- C5B29E7C81D4C77334248AA5
+ BF004A408F3B27648FC59EC5
includeInIndex
1
@@ -5810,41 +5721,68 @@
lastKnownFileType
sourcecode.c.h
name
- MJRefreshFooterView.h
+ UIImage+GIF.h
path
- MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshFooterView.h
+ SDWebImage/UIImage+GIF.h
sourceTree
<group>
- C684423B9F0BCABE69332621
+ C024D03913DF6EA5F878EFBE
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- FMDatabasePool.h
+ SVModalWebViewController.m
path
- src/fmdb/FMDatabasePool.h
+ SVWebViewController/SVModalWebViewController.m
sourceTree
<group>
- C7236453AB69F2D92E70EC3B
+ C05C776692313812C3B4C2B4
- includeInIndex
- 1
+ fileRef
+ A119B53B64AF254F3DAF7205
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- path
- Pods-AFNetworking-prefix.pch
- sourceTree
- <group>
+ PBXBuildFile
+
+ C180BFF717BA5B8A67FFFE53
+
+ fileRef
+ C87C1D1B8FEAEBDCBE6C0C34
+ isa
+ PBXBuildFile
+
+ C28A118CD27C32728F03EB4F
+
+ fileRef
+ B545404BB9E4DE3AFE749CBB
+ isa
+ PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
+
+ C2DB8617DE738C880377729C
+
+ fileRef
+ B6D1E6F496CA960B50C331AD
+ isa
+ PBXBuildFile
+
+ C2F2047F3A09455A94637A0D
+
+ fileRef
+ B1F4FF21E45DFB02CAA6DBFF
+ isa
+ PBXBuildFile
- C834791111C32E19511470D4
+ C37FB122D4C23F324D71F0B7
includeInIndex
1
@@ -5853,66 +5791,42 @@
lastKnownFileType
sourcecode.c.h
name
- MTLModel.h
+ UIImageView+HighlightedWebCache.h
path
- Mantle/MTLModel.h
+ SDWebImage/UIImageView+HighlightedWebCache.h
sourceTree
<group>
- C8409304ABBDB3DE6635DB18
-
- explicitFileType
- archive.ar
- includeInIndex
- 0
- isa
- PBXFileReference
- path
- libPods-SVProgressHUD.a
- sourceTree
- BUILT_PRODUCTS_DIR
-
- C8519CEEEF547AA9EE9D9271
+ C3DEEAC6027984E1CCDE0A79
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- NSData+ImageContentType.m
+ UIRefreshControl+AFNetworking.h
path
- SDWebImage/NSData+ImageContentType.m
+ UIKit+AFNetworking/UIRefreshControl+AFNetworking.h
sourceTree
<group>
- C885E60E6C8BD0A926570AF5
+ C43EF4B93C5AC394AA76BC4F
fileRef
- 9E3CADF4D34242891C1E4725
+ 161E62A9465A051CE58E5A0D
isa
PBXBuildFile
- C932222C6328C3C84A162E3B
+ C4B0E3A997266DC86B2EF69E
- children
-
- 633433250CA4F0951A356573
- 6D0FE93D2F53E6F9BE778A43
- 514D95EC1DE6E7F84DFD7077
- 0BC85B368F05F28D8AC1E014
- E62260C013619653C0C58B3D
- 379D3CCD2FFBB2698E6A788E
-
+ fileRef
+ 7DDB2A7EFEFD7D66D7D642B4
isa
- PBXGroup
- name
- extobjc
- sourceTree
- <group>
+ PBXBuildFile
- CA15D003C21CFCA2294BE5DB
+ C50B6D365BE90FDCF50B69A7
includeInIndex
1
@@ -5921,60 +5835,137 @@
lastKnownFileType
sourcecode.c.objc
name
- SVWebViewControllerActivitySafari.m
+ UIView+MJExtension.m
path
- SVWebViewController/UIActivities/Safari/SVWebViewControllerActivitySafari.m
+ MJRefreshExample/MJRefreshExample/MJRefresh/UIView+MJExtension.m
sourceTree
<group>
- CAC00BB41401121BDC44E7E5
+ C5774AA1A8FFF8FE8C6497E3
- includeInIndex
- 1
+ buildSettings
+
+ ALWAYS_SEARCH_USER_PATHS
+ NO
+ CLANG_CXX_LANGUAGE_STANDARD
+ gnu++0x
+ CLANG_CXX_LIBRARY
+ libc++
+ CLANG_ENABLE_MODULES
+ YES
+ CLANG_ENABLE_OBJC_ARC
+ YES
+ CLANG_WARN_BOOL_CONVERSION
+ YES
+ CLANG_WARN_CONSTANT_CONVERSION
+ YES
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE
+ YES
+ CLANG_WARN_EMPTY_BODY
+ YES
+ CLANG_WARN_ENUM_CONVERSION
+ YES
+ CLANG_WARN_INT_CONVERSION
+ YES
+ CLANG_WARN_OBJC_ROOT_CLASS
+ YES
+ COPY_PHASE_STRIP
+ YES
+ GCC_C_LANGUAGE_STANDARD
+ gnu99
+ GCC_DYNAMIC_NO_PIC
+ NO
+ GCC_OPTIMIZATION_LEVEL
+ 0
+ GCC_PREPROCESSOR_DEFINITIONS
+
+ DEBUG=1
+ $(inherited)
+
+ GCC_SYMBOLS_PRIVATE_EXTERN
+ NO
+ GCC_WARN_64_TO_32_BIT_CONVERSION
+ YES
+ GCC_WARN_ABOUT_RETURN_TYPE
+ YES
+ GCC_WARN_UNDECLARED_SELECTOR
+ YES
+ GCC_WARN_UNINITIALIZED_AUTOS
+ YES
+ GCC_WARN_UNUSED_FUNCTION
+ YES
+ GCC_WARN_UNUSED_VARIABLE
+ YES
+ IPHONEOS_DEPLOYMENT_TARGET
+ 7.0
+ ONLY_ACTIVE_ARCH
+ YES
+ STRIP_INSTALLED_PRODUCT
+ NO
+
isa
- PBXFileReference
- lastKnownFileType
- text.xcconfig
- path
- Pods-Mantle.xcconfig
- sourceTree
- <group>
+ XCBuildConfiguration
+ name
+ Debug
- CB6E38F58D69B7640B71B0D2
+ C582AF7193A0AFF4C3D19FF8
fileRef
- 9FB2FE90C5104F065B94608B
+ B5A085F43F7BA05E99922AEF
isa
PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
- CC2EB1431A8BBB896B00A972
+ C6DB08D280F61DACBF4D3AAD
fileRef
- F0D0B8FA1F237AF39207A58C
+ CFC410BCCACA205D410F13B3
isa
PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
- CCD36D89B4623217A9BB4F11
+ C7C42E7283B016DEFAC91CF2
- containerPortal
- 003A31C6AADD74836B88341F
- isa
- PBXContainerItemProxy
- proxyType
+ includeInIndex
1
- remoteGlobalIDString
- 0D2F41CC755DC941A9D3282F
- remoteInfo
- Pods-SVWebViewController
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.h
+ name
+ MJRefreshComponent.h
+ path
+ MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshComponent.h
+ sourceTree
+ <group>
- CCD59E2FDDA491F626635409
+ C7F772BBF7D7D5FEA9CE8ABA
fileRef
- 25BC2970B45A7D905D5F19BB
+ C50B6D365BE90FDCF50B69A7
isa
PBXBuildFile
- CE4B7722CAC9ED8DD0114663
+ C847355BA3DEBAACBBE7DEAD
+
+ isa
+ PBXTargetDependency
+ name
+ Pods-AFNetworking
+ target
+ 70CDF1B0FB6B3C3599FC5BDD
+ targetProxy
+ E6C8436A64906E61F0ACBEB8
+
+ C87C1D1B8FEAEBDCBE6C0C34
includeInIndex
1
@@ -5983,27 +5974,33 @@
lastKnownFileType
sourcecode.c.h
name
- SWCellScrollView.h
+ SWTableViewCell.h
path
- SWTableViewCell/PodFiles/SWCellScrollView.h
+ SWTableViewCell/PodFiles/SWTableViewCell.h
sourceTree
<group>
- D003F4EA52D0953E6AF73AF6
+ C8F8ADAD27B79FF7562751D5
- fileRef
- F0D0B8FA1F237AF39207A58C
+ containerPortal
+ 81D979F3E87416F4B4516D5F
isa
- PBXBuildFile
+ PBXContainerItemProxy
+ proxyType
+ 1
+ remoteGlobalIDString
+ D68D040FBA01D62A8E3F21CF
+ remoteInfo
+ Pods-SVProgressHUD
- D059787EBF44D5A0BC02F87F
+ C958D94D49E6ECE38DDFD29E
fileRef
- 635165301CE75B15CC16EE35
+ 836D5E6C17DB983DF1634A69
isa
PBXBuildFile
- D09A62E8A6854C6E80B36152
+ C9AF7C2EC59374EA95C53E40
includeInIndex
1
@@ -6012,20 +6009,13 @@
lastKnownFileType
sourcecode.c.objc
name
- AFURLRequestSerialization.m
+ FBShimmeringView.m
path
- AFNetworking/AFURLRequestSerialization.m
+ FBShimmering/FBShimmeringView.m
sourceTree
<group>
- D0A9652EBFFEC41C2F239263
-
- fileRef
- C56F74D0AAB1C57653DA7F7A
- isa
- PBXBuildFile
-
- D0C3135DA2BA3C019BAF2DCF
+ CA17115300376D75D26440F2
includeInIndex
1
@@ -6034,43 +6024,41 @@
lastKnownFileType
sourcecode.c.h
name
- NSValueTransformer+MTLPredefinedTransformerAdditions.h
+ AFURLSessionManager.h
path
- Mantle/NSValueTransformer+MTLPredefinedTransformerAdditions.h
+ AFNetworking/AFURLSessionManager.h
sourceTree
<group>
- D0C6BE4F0F08EEF1AD4759BF
+ CA80C3A4D5A7270178FB5B66
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
- name
- MJRefreshHeaderView.m
+ sourcecode.c.h
path
- MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshHeaderView.m
+ Pods-environment.h
sourceTree
<group>
- D139BE864E7331A490A31F83
+ CADA31036DC6EAB82967ECA4
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- UIProgressView+AFNetworking.m
+ MJRefreshFooter.h
path
- UIKit+AFNetworking/UIProgressView+AFNetworking.m
+ MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshFooter.h
sourceTree
<group>
- D2504912E25654781C939724
+ CBF465FCFAE67B936CD7999F
includeInIndex
1
@@ -6083,150 +6071,105 @@
sourceTree
<group>
- D2AE7F8D94E0B80BFA8F603A
+ CC1C67ABB4980F1129CC1ABF
+
+ fileRef
+ 9643F891DE5CA3D4BB9E89D6
+ isa
+ PBXBuildFile
+
+ CC488329354081651F356099
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- SWCellScrollView.m
+ MJRefreshConst.h
path
- SWTableViewCell/PodFiles/SWCellScrollView.m
+ MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshConst.h
sourceTree
<group>
- D2F8B867A02B15A8D833E6E7
+ CD2CFD88AEC03BECA1A6CE00
+ includeInIndex
+ 1
isa
PBXFileReference
lastKnownFileType
- wrapper.framework
- name
- Security.framework
+ text.xcconfig
path
- Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Security.framework
+ Pods-SWTableViewCell-Private.xcconfig
sourceTree
- DEVELOPER_DIR
+ <group>
- D405E1711A624A1719E082D2
+ CD33ACF6C201881D46574802
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- UIView+MJExtension.m
+ NSValueTransformer+MTLPredefinedTransformerAdditions.h
path
- MJRefreshExample/MJRefreshExample/MJRefresh/UIView+MJExtension.m
+ Mantle/NSValueTransformer+MTLPredefinedTransformerAdditions.h
sourceTree
<group>
- D568513A73D383D812B92361
-
- fileRef
- 57FA31C7342E4A8693201F60
- isa
- PBXBuildFile
-
- D6558E03D7E8E7369D57D62A
-
- buildConfigurationList
- FB388FD7B6E8D0EC4EFA5D58
- buildPhases
-
- 7E4DEC9F5579FF9E6012310D
- 7E4322D8FA302168CB5CFFB2
- B7B2983751AA2DB871BE4F87
-
- buildRules
-
- dependencies
-
- isa
- PBXNativeTarget
- name
- Pods-MJRefresh
- productName
- Pods-MJRefresh
- productReference
- 3CF9B45DDE34993A3FD50533
- productType
- com.apple.product-type.library.static
-
- D6D6D28D37442BAAA468A18D
-
- fileRef
- 8DCB4D41A489D80F71A9D029
- isa
- PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
-
- D76DB4316F4A2BBC29B6E2E7
-
- fileRef
- 222F9FE85B6C3B610407F404
- isa
- PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
-
- D79E955756AA01C364E52FE8
-
- fileRef
- 379D3CCD2FFBB2698E6A788E
- isa
- PBXBuildFile
-
- D88A7258E9903DD9091947B3
+ CD4A5D420DBD6E66570EB0DF
- fileRef
- 7E1CD1AAAE86E52A5E55A54C
+ containerPortal
+ 81D979F3E87416F4B4516D5F
isa
- PBXBuildFile
+ PBXContainerItemProxy
+ proxyType
+ 1
+ remoteGlobalIDString
+ 577435415A323B682400D54D
+ remoteInfo
+ Pods-Mantle
- D8F1FDF888DD2382AECC30C3
+ CD8349A3F4BF18C038579DC6
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- SWTableViewCell.m
+ NSError+MTLModelException.h
path
- SWTableViewCell/PodFiles/SWTableViewCell.m
+ Mantle/NSError+MTLModelException.h
sourceTree
<group>
- D9813C4AEDC5894EE1B3451F
+ CD8984A1672C44CD6FA8B455
+
+ fileRef
+ D1404AB4AA7E3E03EECDBA21
+ isa
+ PBXBuildFile
+
+ CD8D1F166166902627915896
includeInIndex
1
isa
PBXFileReference
- lastKnownFileType
- sourcecode.c.h
name
- SVWebViewControllerActivityChrome.h
+ SVWebViewControllerActivitySafari-iPad.png
path
- SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome.h
+ SVWebViewController/UIActivities/Safari/SVWebViewControllerActivitySafari-iPad.png
sourceTree
<group>
- D9CF805123DCF31BD815B4BB
+ CD9137A020694A9525101FB3
includeInIndex
1
@@ -6234,19 +6177,17 @@
PBXFileReference
lastKnownFileType
sourcecode.c.h
- name
- AFHTTPSessionManager.h
path
- AFNetworking/AFHTTPSessionManager.h
+ Pods-MJRefresh-prefix.pch
sourceTree
<group>
- DB34CB5D53D03543A81CD43D
+ CDE387D2836914F846D77F58
buildConfigurations
- B9011D79C925C7A071C4D24A
- B37092B574E47123FA62F48A
+ DEFB338749E8A45D995F47E6
+ 73538EEEADB1058CDECEF95C
defaultConfigurationIsVisible
0
@@ -6255,29 +6196,69 @@
isa
XCConfigurationList
- DB5A704B96D04FBF9549DA3B
+ CE3EDC27205A31036EFD90B8
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ text.xcconfig
+ path
+ Pods-MJRefresh.xcconfig
+ sourceTree
+ <group>
+
+ CF1457A202FBD3FC56768EB1
+
+ fileRef
+ 017B14BC9F461EE2E432473F
+ isa
+ PBXBuildFile
+
+ CF29DC3C94D7344966D490D7
fileRef
- 2D3A6D4FA7D703DF6C8A7450
+ 7D3DFDFFF6AA0103584F02A3
isa
PBXBuildFile
- DC332F6A26805C987939E79B
+ CFC410BCCACA205D410F13B3
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- FMDatabaseQueue.h
+ MTLReflection.m
path
- src/fmdb/FMDatabaseQueue.h
+ Mantle/MTLReflection.m
sourceTree
<group>
- DC50FB9ACAC3D68AE360BF5F
+ CFD8C4C6DCFA8E784A826866
+
+ fileRef
+ 86EB9A08B9B6E1267BD57145
+ isa
+ PBXBuildFile
+
+ CFDFBCB4455A036E8112FA54
+
+ explicitFileType
+ archive.ar
+ includeInIndex
+ 0
+ isa
+ PBXFileReference
+ path
+ libPods.a
+ sourceTree
+ BUILT_PRODUCTS_DIR
+
+ D1404AB4AA7E3E03EECDBA21
includeInIndex
1
@@ -6286,13 +6267,20 @@
lastKnownFileType
sourcecode.c.objc
name
- UIScrollView+MJExtension.m
+ SVProgressHUD.m
path
- MJRefreshExample/MJRefreshExample/MJRefresh/UIScrollView+MJExtension.m
+ SVProgressHUD/SVProgressHUD.m
sourceTree
<group>
- DC6959F6B0389433A846F09B
+ D14C1D38F4697374B779ED66
+
+ fileRef
+ 86EB9A08B9B6E1267BD57145
+ isa
+ PBXBuildFile
+
+ D15DE4AB72E69F69799EE587
includeInIndex
1
@@ -6301,107 +6289,158 @@
lastKnownFileType
sourcecode.c.h
name
- MJRefreshHeaderView.h
+ SDWebImageDownloaderOperation.h
path
- MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshHeaderView.h
+ SDWebImage/SDWebImageDownloaderOperation.h
sourceTree
<group>
- DCFD647287A6F3DEE53059EB
+ D21098B980D4B99BBE4EBCB0
+ includeInIndex
+ 1
isa
- PBXTargetDependency
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
name
- Pods-Mantle
- target
- EA053313AC9B201518E824AF
- targetProxy
- 2C5859609EFA12DBF8041624
+ NSMutableArray+SWUtilityButtons.m
+ path
+ SWTableViewCell/PodFiles/NSMutableArray+SWUtilityButtons.m
+ sourceTree
+ <group>
- DD72EA41B8BD0DC998006611
+ D2D8B6939934DB2DEE11DAA4
- children
-
- A98547DB16A7BA47C179FA8D
-
+ fileRef
+ 0FB12360D6BEA877E224ADA1
+ isa
+ PBXBuildFile
+
+ D2FB14DD6996DA5416AAD4A7
+
+ buildSettings
+
+ ALWAYS_SEARCH_USER_PATHS
+ NO
+ CLANG_CXX_LANGUAGE_STANDARD
+ gnu++0x
+ CLANG_CXX_LIBRARY
+ libc++
+ CLANG_ENABLE_MODULES
+ YES
+ CLANG_ENABLE_OBJC_ARC
+ YES
+ CLANG_WARN_BOOL_CONVERSION
+ YES
+ CLANG_WARN_CONSTANT_CONVERSION
+ YES
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE
+ YES
+ CLANG_WARN_EMPTY_BODY
+ YES
+ CLANG_WARN_ENUM_CONVERSION
+ YES
+ CLANG_WARN_INT_CONVERSION
+ YES
+ CLANG_WARN_OBJC_ROOT_CLASS
+ YES
+ COPY_PHASE_STRIP
+ NO
+ ENABLE_NS_ASSERTIONS
+ NO
+ GCC_C_LANGUAGE_STANDARD
+ gnu99
+ GCC_PREPROCESSOR_DEFINITIONS
+
+ RELEASE=1
+
+ GCC_WARN_64_TO_32_BIT_CONVERSION
+ YES
+ GCC_WARN_ABOUT_RETURN_TYPE
+ YES
+ GCC_WARN_UNDECLARED_SELECTOR
+ YES
+ GCC_WARN_UNINITIALIZED_AUTOS
+ YES
+ GCC_WARN_UNUSED_FUNCTION
+ YES
+ GCC_WARN_UNUSED_VARIABLE
+ YES
+ IPHONEOS_DEPLOYMENT_TARGET
+ 7.0
+ STRIP_INSTALLED_PRODUCT
+ NO
+ VALIDATE_PRODUCT
+ YES
+
isa
- PBXGroup
+ XCBuildConfiguration
name
- Frameworks
- sourceTree
- <group>
+ Release
- DD8F1007201AC5D9E168DE32
+ D3C132A00F42F9F9F8C19476
fileRef
- AC6F1AA84590ACFF61BAAD60
+ AF470BA25B4AEDD098801E35
isa
PBXBuildFile
- DDA12FA0A07A90423DAC2DAF
+ D3CE7AF1CEF858F829394CC8
fileRef
- F0D0B8FA1F237AF39207A58C
+ 6813759A3D4B289309C65CC8
isa
PBXBuildFile
- DDCF5122548DF51242583A68
+ D4597DB6B6075E95AAE77F0F
fileRef
- D2F8B867A02B15A8D833E6E7
+ A90F74085A3775EED69FD854
isa
PBXBuildFile
- DE2CEF2D7F7D4D643900FCE5
+ D4C3346C10EF1BC04F58673E
fileRef
- 846C466F2240C4C93CD6C24C
+ AD8E2E838E28925DC440CEB5
isa
PBXBuildFile
- DF3027E5A4AB1DC95FB5EA9D
+ D4DB003F66931D9E0941ED7A
fileRef
- B3C85AC9AFD3294AE7C56106
+ 878766D5C2D02668B15FED39
isa
PBXBuildFile
- DFFAC01197AE918D4C9DFD66
+ D57B5B10F635C06744DD1C8C
- fileRef
- A95D82B9D1D2BEFE3D2DAB00
isa
- PBXBuildFile
+ PBXTargetDependency
+ name
+ Pods-MJRefresh
+ target
+ 6CE6AFC3F8CD70241EF59AB9
+ targetProxy
+ 231F0312ABE7BE7661B60810
- E047647F1042A54423864302
+ D644D20C4E3C77F3E6A6C450
fileRef
- C5B29E7C81D4C77334248AA5
+ C37FB122D4C23F324D71F0B7
isa
PBXBuildFile
- E0E9DDEE088E41C8CF4C003D
-
- includeInIndex
- 1
- isa
- PBXFileReference
- lastKnownFileType
- text.xcconfig
- path
- Pods.release.xcconfig
- sourceTree
- <group>
-
- E0F50EA1905F2A7094812973
+ D68D040FBA01D62A8E3F21CF
buildConfigurationList
- DB34CB5D53D03543A81CD43D
+ F46C4F7613F3810FDE30F27C
buildPhases
- 273E8CC1B7A1DF52553B76D7
- 26D05A8A28DCD60C1CA8EC7E
- 59C305ABE1A25B9CB62E5D80
+ AEE0860D1763213A0AFE6929
+ DBC2E3B10BD01C44AB7DCF06
+ 7216C951E31F705D623F936A
buildRules
@@ -6410,33 +6449,32 @@
isa
PBXNativeTarget
name
- Pods-AFNetworking
+ Pods-SVProgressHUD
productName
- Pods-AFNetworking
+ Pods-SVProgressHUD
productReference
- 47C11AD21FEAD8A5CAA86FC0
+ 7BF20CB8E89FE06EA149B817
productType
com.apple.product-type.library.static
- E11A8E6E65928AF83EDA8DEF
+ D6B3D84E7C40115C6F32A34A
- children
-
- 404F813C33EA2B5B22382ED6
- 585F33F75FFBDB5A2D635BC5
- 16BE2A454A10A0FFBBFDD201
- C7236453AB69F2D92E70EC3B
-
+ includeInIndex
+ 1
isa
- PBXGroup
+ PBXFileReference
+ lastKnownFileType
+ text
name
- Support Files
+ Podfile
path
- ../Target Support Files/Pods-AFNetworking
+ ../Podfile
sourceTree
- <group>
+ SOURCE_ROOT
+ xcLanguageSpecificationIdentifier
+ xcode.lang.ruby
- E1AD240F7028E1A092DCBEDC
+ D6CB1F2691B16FB9B1701C9C
includeInIndex
1
@@ -6445,44 +6483,54 @@
lastKnownFileType
sourcecode.c.h
name
- AFSecurityPolicy.h
+ UIActivityIndicatorView+AFNetworking.h
path
- AFNetworking/AFSecurityPolicy.h
+ UIKit+AFNetworking/UIActivityIndicatorView+AFNetworking.h
sourceTree
<group>
- E29DFA8F7F2E89354CECB6C3
+ D7880C07AA847B66E17F9F0A
- includeInIndex
- 1
+ fileRef
+ 12F59C763943F4966B45BFB4
isa
- PBXFileReference
- name
- SVWebViewControllerActivityChrome-iPad@2x.png
- path
- SVWebViewController/UIActivities/Chrome/SVWebViewControllerActivityChrome-iPad@2x.png
- sourceTree
- <group>
+ PBXBuildFile
+
+ D7989D1C30764BC7F9C80624
+
+ buildConfigurations
+
+ 1A142289B602EBE69D1249B4
+ 6588A0868BCC4183CA3B6A86
+
+ defaultConfigurationIsVisible
+ 0
+ defaultConfigurationName
+ Release
+ isa
+ XCConfigurationList
- E2D8E0AC81FFF45B5643EB4C
+ D7FD3BD46B1CABD2F2AE50EE
buildActionMask
2147483647
files
- A0EB66A861D7F9BE99167595
- F8219A50BB91E25BFDDAA0AD
- 37B990D486EB877EA36E8C25
- F6E91A553C49F4862B78C4F1
- D76DB4316F4A2BBC29B6E2E7
- 613007691409B9A6751D3737
+ 1EE3FDF8E269928BE3CA0FD8
isa
- PBXSourcesBuildPhase
+ PBXFrameworksBuildPhase
runOnlyForDeploymentPostprocessing
0
- E32EAF52CDE8541AAA86F6A0
+ D9AC5E5A7FD9CD228B2E0E9E
+
+ fileRef
+ 1C92FEB632B8CFF036BFBDBE
+ isa
+ PBXBuildFile
+
+ D9BC1825A20D16596316B079
includeInIndex
1
@@ -6491,651 +6539,545 @@
lastKnownFileType
sourcecode.c.objc
name
- SDWebImageCompat.m
+ SVWebViewController.m
path
- SDWebImage/SDWebImageCompat.m
+ SVWebViewController/SVWebViewController.m
sourceTree
<group>
- E3C180F70C4829EC3E7C8741
+ DA2341FB44DCAD22E128F6E1
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- text.xcconfig
+ sourcecode.c.h
+ name
+ EXTRuntimeExtensions.h
path
- Pods-FMDB-Private.xcconfig
+ Mantle/extobjc/EXTRuntimeExtensions.h
sourceTree
<group>
- E45958CE3CBD11F1707F441C
-
- fileRef
- BFCFD346B7D3A14BA3BA069B
- isa
- PBXBuildFile
-
- E4F17FDA9A2004644DE362D1
+ DA466A036868C7B919F43216
- fileRef
- DC332F6A26805C987939E79B
+ children
+
+ 35A704D283AC845C1F7D3779
+
isa
- PBXBuildFile
+ PBXGroup
+ name
+ Resources
+ sourceTree
+ <group>
- E62260C013619653C0C58B3D
+ DACCC598E67DEDF2B964152C
- includeInIndex
- 1
+ children
+
+ CFDFBCB4455A036E8112FA54
+ 8FE9BF5050F6FC295DDC2348
+ 942FFA243C26063337A25F3C
+ 9CEFCB11A62BDBC8D6BA730C
+ 079C8DABD90354174F62579C
+ 7BF20CB8E89FE06EA149B817
+ 7B223D387702971DA08CD4D7
+ A6AD37D8B00F8892C4806CF5
+ 5EEA0F052F38C601F48496AB
+
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
+ PBXGroup
name
- EXTScope.m
- path
- Mantle/extobjc/EXTScope.m
+ Products
sourceTree
<group>
- E6D38302A5F37DB5658C41BB
+ DBC2E3B10BD01C44AB7DCF06
buildActionMask
2147483647
files
- 21E3949570212F296A98F3C3
+ A087CA9E108E9E21024C9172
+ F470B44B4B1CE055518D6169
isa
- PBXSourcesBuildPhase
+ PBXFrameworksBuildPhase
runOnlyForDeploymentPostprocessing
0
- E7926F44F6DD7675C4CAB292
+ DC8F3FCA873B6D58BD536AEC
- includeInIndex
- 1
+ buildActionMask
+ 2147483647
+ files
+
+ CFD8C4C6DCFA8E784A826866
+
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- name
- MTLValueTransformer.h
- path
- Mantle/MTLValueTransformer.h
- sourceTree
- <group>
+ PBXFrameworksBuildPhase
+ runOnlyForDeploymentPostprocessing
+ 0
- E8D5D18DAA535CA6B08AA393
+ DD032B17044D0D8A8AC9BE55
- includeInIndex
- 1
+ fileRef
+ 0249F3F32ECE11C31DA2A281
isa
- PBXFileReference
- lastKnownFileType
- text.xcconfig
- path
- Pods-SVWebViewController-Private.xcconfig
- sourceTree
- <group>
+ PBXBuildFile
- E96F46F8A984911D7538CA63
+ DDF77BFDA744563444169FA8
- includeInIndex
- 1
+ fileRef
+ 3D75C65180AD411A4D968C06
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- name
- UIImageView+WebCache.h
- path
- SDWebImage/UIImageView+WebCache.h
- sourceTree
- <group>
+ PBXBuildFile
- E9A68AA93E6B24526C1517E5
+ DEA466424653E70B8209013D
- includeInIndex
- 1
+ children
+
+ 0C2A438B42DC07E1A2B8E51B
+ 509DA73C428A64C02BF0B75C
+ D6CB1F2691B16FB9B1701C9C
+ 73F06571B260553C31103BC9
+ 878766D5C2D02668B15FED39
+ 8E04C8067D58420429F849D3
+ 0FB12360D6BEA877E224ADA1
+ A46D26FE67677E1BCCEC9648
+ E3AB4479A70BBD8BEEB85735
+ FB68A1B10C381EEFC0E105CA
+ B113FB03415126F4B88F2139
+ 7CFB13291239474A4401636E
+ 70056B349FEB6A757345F167
+ C3DEEAC6027984E1CCDE0A79
+ 84FE7E230D2FC3B77F845364
+ 12F59C763943F4966B45BFB4
+ 2B388C41DBF1EEF5D24C15BD
+
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
+ PBXGroup
name
- SDWebImageOperation.h
- path
- SDWebImage/SDWebImageOperation.h
+ UIKit
sourceTree
<group>
- EA053313AC9B201518E824AF
+ DEF1C98505E86E50864C1FC3
- buildConfigurationList
- 31ED12F5CEA9A23F5663038A
- buildPhases
+ children
- 73866FD56D89AA5A3F622874
- 06B18C667B34A3836288B3E6
- 9F745963084D8E9E216392E2
+ D6B3D84E7C40115C6F32A34A
+ 28008C3054989A0ECB72D888
+ AE9AE9605C535FD64A7E4136
+ DACCC598E67DEDF2B964152C
+ 4B8BFDE18D1FCA43E9E5BB32
- buildRules
-
- dependencies
-
isa
- PBXNativeTarget
- name
- Pods-Mantle
- productName
- Pods-Mantle
- productReference
- 0DDB7686E187F3FC19D520AC
- productType
- com.apple.product-type.library.static
+ PBXGroup
+ sourceTree
+ <group>
+
+ DEFB338749E8A45D995F47E6
+
+ baseConfigurationReference
+ 51CF2F2FD419BD460AFE8089
+ buildSettings
+
+ ALWAYS_SEARCH_USER_PATHS
+ NO
+ COPY_PHASE_STRIP
+ NO
+ DSTROOT
+ /tmp/xcodeproj.dst
+ GCC_DYNAMIC_NO_PIC
+ NO
+ GCC_OPTIMIZATION_LEVEL
+ 0
+ GCC_PRECOMPILE_PREFIX_HEADER
+ YES
+ GCC_PREPROCESSOR_DEFINITIONS
+
+ DEBUG=1
+ $(inherited)
+
+ GCC_SYMBOLS_PRIVATE_EXTERN
+ NO
+ INSTALL_PATH
+ $(BUILT_PRODUCTS_DIR)
+ IPHONEOS_DEPLOYMENT_TARGET
+ 7.0
+ OTHER_LDFLAGS
+
+ OTHER_LIBTOOLFLAGS
+
+ PRODUCT_NAME
+ $(TARGET_NAME)
+ PUBLIC_HEADERS_FOLDER_PATH
+ $(TARGET_NAME)
+ SDKROOT
+ iphoneos
+ SKIP_INSTALL
+ YES
+
+ isa
+ XCBuildConfiguration
+ name
+ Debug
- EA063A5FA969AA2475F21918
+ E0064455F987AA18ECC111F4
- children
-
- 94D197FD4192DB667B6E9A51
- 34A0A9B27EF8487D6B85D039
-
+ fileRef
+ 03161642A68CD1941BFCCA57
isa
- PBXGroup
- name
- Reachability
- sourceTree
- <group>
+ PBXBuildFile
- EA98CE819CDC3A1C462DA862
+ E05AA74B831F33187A80AFB2
- includeInIndex
- 1
isa
PBXFileReference
lastKnownFileType
- text.xcconfig
+ wrapper.framework
+ name
+ ImageIO.framework
path
- Pods-SDWebImage.xcconfig
+ Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/ImageIO.framework
sourceTree
- <group>
-
- EAABEB6BACA94FCEFBA11DFD
-
- fileRef
- A8C971E5B6D1D6B34B5C9A1B
- isa
- PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
+ DEVELOPER_DIR
- EB111D63CDEEB43E08195847
+ E19E6C14D588684CC18224AE
- includeInIndex
- 1
+ children
+
+ 4D6BEC56F9F00A366232143C
+ 76B7796A1EB6299CE260128F
+ 4436096DFAA117FC404F08AE
+ A90F74085A3775EED69FD854
+ C9AF7C2EC59374EA95C53E40
+ FB82277D905C9A6A87D36F9E
+
isa
- PBXFileReference
- lastKnownFileType
- wrapper.plug-in
+ PBXGroup
name
- SVProgressHUD.bundle
+ Shimmer
path
- SVProgressHUD/SVProgressHUD.bundle
+ Shimmer
sourceTree
<group>
- EB394718051F19102CEA333B
+ E1D5FA92C24CAD6F429DBC36
fileRef
- BB46AB577CB11E2DEC496B53
+ 9D641BF01B9DCB3759BB7650
isa
PBXBuildFile
- EBB725B945B1732ECF3A9006
+ E280590722CB57FBB839C5F4
+
+ containerPortal
+ 81D979F3E87416F4B4516D5F
+ isa
+ PBXContainerItemProxy
+ proxyType
+ 1
+ remoteGlobalIDString
+ 1E803AD000DE2CF76ED8A078
+ remoteInfo
+ Pods-SVWebViewController
+
+ E2B6D58F73771CA96B3C2820
buildActionMask
2147483647
files
- C55BDF5794C4C27E7A69A131
- 7F117C1078DB1AD4F3B4FE11
- A2EBB8311F6F713C23AA9103
- DF3027E5A4AB1DC95FB5EA9D
- 9F4821AF45F02268E44D0C1D
- 9EFF5CE823942564335B0542
- 92D1A0BBD0D2B1EA721B084C
- 65D19C9FCE68CD267930EF33
- 662A98C63D4A25AEDD5B5EC8
- 379C4A4E6343D5622A38206E
- B0F31E9D675CDD8EF475F4A7
- 4639EC1DFC9BDEE03FCECD28
- 2E82A19ADA9D6FA582DFA1B8
- 6C883654D7A0A3023FD1840D
- 5C59B57AC630CD73AB5E2D1E
+ D14C1D38F4697374B779ED66
isa
- PBXHeadersBuildPhase
+ PBXFrameworksBuildPhase
runOnlyForDeploymentPostprocessing
0
- ECDFCA3A35CD6A95747B8E90
+ E38AA2650B16052F84F74A50
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- text.xcconfig
+ sourcecode.c.h
+ name
+ SDWebImageOperation.h
path
- Pods.debug.xcconfig
+ SDWebImage/SDWebImageOperation.h
sourceTree
<group>
- ECFFA56C6B3F8AC988E09B43
-
- fileRef
- A19B2B715041A76AD22B7BB7
- isa
- PBXBuildFile
-
- EDA79BFF36ED8CC66472C4B4
+ E39092337355ABB89F457406
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
- name
- AFURLResponseSerialization.m
+ text.xcconfig
path
- AFNetworking/AFURLResponseSerialization.m
+ Pods-SWTableViewCell.xcconfig
sourceTree
<group>
- EDCDF1F1A409A8EF63058261
-
- fileRef
- FD93687F5220E28F92C0D41E
- isa
- PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
-
- EF04ADF8DBB1227D34EBBEEA
+ E3AB4479A70BBD8BEEB85735
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- text
+ sourcecode.c.h
name
- Podfile
+ UIImageView+AFNetworking.h
path
- ../Podfile
+ UIKit+AFNetworking/UIImageView+AFNetworking.h
sourceTree
- SOURCE_ROOT
- xcLanguageSpecificationIdentifier
- xcode.lang.ruby
-
- EF1605A5BAD020789C0D6DCD
-
- buildConfigurations
-
- 24200E9BAE5616D614E3BA14
- 3886D77C2964260BA24AC311
-
- defaultConfigurationIsVisible
- 0
- defaultConfigurationName
- Release
- isa
- XCConfigurationList
+ <group>
- F02AEA09DBE0E12AF360F35D
+ E4CEE3D142701517931AC844
fileRef
- 94D197FD4192DB667B6E9A51
+ 3798DEA0FAA541D316F5FE1C
isa
PBXBuildFile
- F0D0B8FA1F237AF39207A58C
+ E68153ED11688501908927F4
+ buildActionMask
+ 2147483647
+ files
+
+ F21DD7368E6A3809F212B2BE
+
isa
- PBXFileReference
- lastKnownFileType
- wrapper.framework
- name
- Foundation.framework
- path
- Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Foundation.framework
- sourceTree
- DEVELOPER_DIR
+ PBXSourcesBuildPhase
+ runOnlyForDeploymentPostprocessing
+ 0
- F0DD19AA7C01867C1769DBE1
+ E6C8436A64906E61F0ACBEB8
- includeInIndex
- 1
+ containerPortal
+ 81D979F3E87416F4B4516D5F
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.h
- name
- NSArray+MTLManipulationAdditions.h
- path
- Mantle/NSArray+MTLManipulationAdditions.h
- sourceTree
- <group>
+ PBXContainerItemProxy
+ proxyType
+ 1
+ remoteGlobalIDString
+ 70CDF1B0FB6B3C3599FC5BDD
+ remoteInfo
+ Pods-AFNetworking
- F19082954117D5EC4CBF111A
+ E775B6493ABD67E0B9F1A83E
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- SDWebImageCompat.h
+ NSObject+MTLComparisonAdditions.m
path
- SDWebImage/SDWebImageCompat.h
+ Mantle/NSObject+MTLComparisonAdditions.m
sourceTree
<group>
- F20B4E0EAAA530D24685A4E2
+ E841AAF06ED6A0CAC0CC05ED
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- text.xcconfig
+ sourcecode.c.objc
+ name
+ MTLModel.m
path
- Pods-SVProgressHUD-Private.xcconfig
+ Mantle/MTLModel.m
sourceTree
<group>
- F38473E10FE10739CC22000B
-
- fileRef
- 8E7746C93B5A382A8BFB31C8
- isa
- PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
-
- F3B157F0A7C5AE48DEF99006
-
- fileRef
- 290221507373808ABAA4054B
- isa
- PBXBuildFile
-
- F3B7C44428DC09B4933F043E
-
- buildActionMask
- 2147483647
- files
-
- 531197FDF80BC84527CCAF02
-
- isa
- PBXFrameworksBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
-
- F3E77A78BED9A830D2670005
+ E89A849D5C7F06D308A3B1A9
- includeInIndex
- 1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ wrapper.framework
name
- SWUtilityButtonView.m
+ QuartzCore.framework
path
- SWTableViewCell/PodFiles/SWUtilityButtonView.m
+ Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/QuartzCore.framework
sourceTree
- <group>
+ DEVELOPER_DIR
- F44EDFC44AEF1BC95DB7FA7D
+ E941B207D74922475F8D6E73
fileRef
- 15C57B0A0D754AA9967330DF
+ BF004A408F3B27648FC59EC5
isa
PBXBuildFile
- F49B17CD5DB7BF511AD95FE0
+ E9A7BB0F66E56933CE58368F
fileRef
- FC45931EABC40836F3C02FDB
+ CA17115300376D75D26440F2
isa
PBXBuildFile
- F5336FA18F2792224B01F5AD
+ EA8986163F9F6442BA8F993E
fileRef
- 971BBE7FBC532FD0C3684E99
+ 701F96ACC76C74D7DBFE587B
isa
PBXBuildFile
- F5AD41E8F4E3CBFFE9D0A6AD
-
- buildConfigurationList
- 82D7942CFFB4B5F9A8039B0E
- buildPhases
-
- E2D8E0AC81FFF45B5643EB4C
- 0E941574580314BABC46EF00
- 59DD36BD9A4D804D5A701ED2
-
- buildRules
-
- dependencies
-
- isa
- PBXNativeTarget
- name
- Pods-FMDB
- productName
- Pods-FMDB
- productReference
- 0398B69338481EC817F6F6EB
- productType
- com.apple.product-type.library.static
-
- F5FB40E1554F5686F97998FA
+ EAF234E3AA32CB7DAE26A06F
+ includeInIndex
+ 1
isa
PBXFileReference
lastKnownFileType
- wrapper.framework
- name
- QuartzCore.framework
+ text.xcconfig
path
- Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/QuartzCore.framework
+ Pods-SVWebViewController.xcconfig
sourceTree
- DEVELOPER_DIR
-
- F6CDC7E60CF17930F7262034
-
- baseConfigurationReference
- F20B4E0EAAA530D24685A4E2
- buildSettings
-
- ALWAYS_SEARCH_USER_PATHS
- NO
- COPY_PHASE_STRIP
- NO
- DSTROOT
- /tmp/xcodeproj.dst
- GCC_DYNAMIC_NO_PIC
- NO
- GCC_OPTIMIZATION_LEVEL
- 0
- GCC_PRECOMPILE_PREFIX_HEADER
- YES
- GCC_PREFIX_HEADER
- Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-prefix.pch
- GCC_PREPROCESSOR_DEFINITIONS
-
- DEBUG=1
- $(inherited)
-
- GCC_SYMBOLS_PRIVATE_EXTERN
- NO
- INSTALL_PATH
- $(BUILT_PRODUCTS_DIR)
- IPHONEOS_DEPLOYMENT_TARGET
- 7.0
- OTHER_LDFLAGS
-
- OTHER_LIBTOOLFLAGS
-
- PRODUCT_NAME
- $(TARGET_NAME)
- PUBLIC_HEADERS_FOLDER_PATH
- $(TARGET_NAME)
- SDKROOT
- iphoneos
- SKIP_INSTALL
- YES
-
+ <group>
+
+ EB2A2DDC51A4FD1EBBF8BA79
+
isa
- XCBuildConfiguration
+ PBXTargetDependency
name
- Debug
+ Pods-Shimmer
+ target
+ 606339BB1F98D18E401A0055
+ targetProxy
+ F6F4E9AB3AFDABFA6931ACA7
+
+ ED63151D6E956C666D9BD14F
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
+ name
+ MTLJSONAdapter.m
+ path
+ Mantle/MTLJSONAdapter.m
+ sourceTree
+ <group>
+
+ EE34B75B8433DF4D70F5200D
+
+ isa
+ PBXTargetDependency
+ name
+ Pods-SVWebViewController
+ target
+ 1E803AD000DE2CF76ED8A078
+ targetProxy
+ E280590722CB57FBB839C5F4
- F6E91A553C49F4862B78C4F1
+ EF5E0E26F44584766F139292
fileRef
- FFF0E1F586F1C9698F168012
+ 87D9BF752A70DA83F123E5E7
isa
PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
- F7446765000306425A8653CB
+ F037D782B4ADF73E592EBDE5
- children
-
- 9AC054684C72878BFD1354BD
- 54AF66B17C0AEFF7AE1E5828
- B49FB948DC12B27713617596
- EA063A5FA969AA2475F21918
- 060110539E4022EC7547DC8A
- 76F2FB474F9C57ED0AB606BB
- E11A8E6E65928AF83EDA8DEF
- 071305CB59F3D8E013288619
-
isa
- PBXGroup
+ PBXFileReference
+ lastKnownFileType
+ wrapper.framework
name
- AFNetworking
+ Security.framework
path
- AFNetworking
+ Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Security.framework
sourceTree
- <group>
+ DEVELOPER_DIR
- F78D23F252315D98B9BE3FA6
+ F095602FA7AC56B1A442458D
fileRef
- 7A75EF39F7B6094E98E9D58F
+ 335361E3B7EBFEF025533997
isa
PBXBuildFile
- F8219A50BB91E25BFDDAA0AD
+ F12F8D2E100E02797A7DC981
fileRef
- 96B82497505EF98401B50E1D
+ 9E9D0D9F98C6F64688498FA0
isa
PBXBuildFile
- settings
-
- COMPILER_FLAGS
- -DOS_OBJECT_USE_OBJC=0
-
- F85DB5D3718ADE63303C06E7
+ F21CB8120EF2D5EE038E22B2
- children
-
- 74ED67273EBDF1D93351D598
- F20B4E0EAAA530D24685A4E2
- 3FE2CB4E3BF724BF9DADD804
- 5161C757881F6F6873559967
-
+ includeInIndex
+ 1
isa
- PBXGroup
- name
- Support Files
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
path
- ../Target Support Files/Pods-SVProgressHUD
+ Pods-SWTableViewCell-dummy.m
sourceTree
<group>
- FA2858642D021A2940D97851
+ F21DD7368E6A3809F212B2BE
fileRef
- 63B65631DCD63B55E53DCE03
+ 6516689B190F38FDE8D21843
isa
PBXBuildFile
- FA9D9250626EDCE049F74048
+ F2DF18E782B13E13F56BD784
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- SVModalWebViewController.h
+ MJRefreshGifFooter.m
path
- SVWebViewController/SVModalWebViewController.h
+ MJRefreshExample/MJRefreshExample/MJRefresh/MJRefreshGifFooter.m
sourceTree
<group>
- FAFFA27183B7E1544DC2D54D
+ F3527D318E9B0FE341C39FD3
- buildActionMask
- 2147483647
- files
-
- 3396072C759A0E898549D6E7
- 97959B6C405A6219826BAFBE
- DE2CEF2D7F7D4D643900FCE5
- 96E033AF44F3F21FB871FC01
- 730266F29F62BC3EB931952F
- 9C079AF4CCEEC69481F2BF10
-
+ fileRef
+ 288C837B4AE7323562462C3A
isa
- PBXSourcesBuildPhase
- runOnlyForDeploymentPostprocessing
- 0
+ PBXBuildFile
- FB388FD7B6E8D0EC4EFA5D58
+ F462B3022831473DDF26EA18
+
+ fileRef
+ 8689A3CC3FD222309ED05ACB
+ isa
+ PBXBuildFile
+
+ F46C4F7613F3810FDE30F27C
buildConfigurations
- 47BC372C33FCDDB0603FF870
- A19CDB887CB102ECC06C0723
+ 0F41C1FA82ED1CE863ACA0D2
+ B4D86A148E61EDCE85A2F9CF
defaultConfigurationIsVisible
0
@@ -7144,17 +7086,24 @@
isa
XCConfigurationList
- FB392C3A7B8813F8724C2732
+ F470B44B4B1CE055518D6169
+
+ fileRef
+ E89A849D5C7F06D308A3B1A9
+ isa
+ PBXBuildFile
+
+ F4A2225775DD229E3C63BECD
fileRef
- 6D6492CFDFC03E3EEED90937
+ F037D782B4ADF73E592EBDE5
isa
PBXBuildFile
- FB6C8948A46CF245ECD20949
+ F4CF5630FC9C35B1117974BD
fileRef
- 573C8CC99C8641490B222C89
+ 4C8B4F9E0751276ACBFFACEA
isa
PBXBuildFile
settings
@@ -7163,7 +7112,67 @@
-DOS_OBJECT_USE_OBJC=0
- FC45931EABC40836F3C02FDB
+ F6093A0B5FB224E073CD4A9C
+
+ fileRef
+ 95FF2B992C0CBC462AC1C0EF
+ isa
+ PBXBuildFile
+
+ F615D1D36012176EAC77C67D
+
+ includeInIndex
+ 1
+ isa
+ PBXFileReference
+ lastKnownFileType
+ sourcecode.c.objc
+ path
+ Pods-Mantle-dummy.m
+ sourceTree
+ <group>
+
+ F684B190D03659D4947FEA45
+
+ isa
+ PBXFileReference
+ lastKnownFileType
+ wrapper.framework
+ name
+ MobileCoreServices.framework
+ path
+ Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/MobileCoreServices.framework
+ sourceTree
+ DEVELOPER_DIR
+
+ F6F4E9AB3AFDABFA6931ACA7
+
+ containerPortal
+ 81D979F3E87416F4B4516D5F
+ isa
+ PBXContainerItemProxy
+ proxyType
+ 1
+ remoteGlobalIDString
+ 606339BB1F98D18E401A0055
+ remoteInfo
+ Pods-Shimmer
+
+ F722582AF97F8BC79D022EB9
+
+ fileRef
+ 53CF4E2FFFD543ABD0F1621C
+ isa
+ PBXBuildFile
+
+ F99B71AC8E9B4C2925D0F0BF
+
+ fileRef
+ 15C59580BF2B4473B05F415D
+ isa
+ PBXBuildFile
+
+ F9BA8200CBE82E1229395A4D
includeInIndex
1
@@ -7178,37 +7187,54 @@
sourceTree
<group>
- FC51B49E4686DFD82E09DE0B
+ F9D859481550E0BAAFC49F8D
+
+ buildActionMask
+ 2147483647
+ files
+
+ D3C132A00F42F9F9F8C19476
+ BC3B5779BE0E0FCD39A14E06
+ 6B37248339C21DF24CD921DE
+ C180BFF717BA5B8A67FFFE53
+ C05C776692313812C3B4C2B4
+ C4B0E3A997266DC86B2EF69E
+
+ isa
+ PBXHeadersBuildPhase
+ runOnlyForDeploymentPostprocessing
+ 0
+
+ FA0452B54E39A5441282340D
baseConfigurationReference
- E3C180F70C4829EC3E7C8741
+ 4D975F3E0C5580B245740BA7
buildSettings
ALWAYS_SEARCH_USER_PATHS
NO
COPY_PHASE_STRIP
- NO
+ YES
DSTROOT
/tmp/xcodeproj.dst
- GCC_DYNAMIC_NO_PIC
- NO
- GCC_OPTIMIZATION_LEVEL
- 0
GCC_PRECOMPILE_PREFIX_HEADER
YES
GCC_PREFIX_HEADER
- Target Support Files/Pods-FMDB/Pods-FMDB-prefix.pch
- GCC_PREPROCESSOR_DEFINITIONS
-
- DEBUG=1
- $(inherited)
-
- GCC_SYMBOLS_PRIVATE_EXTERN
- NO
+ Target Support Files/Pods-MJRefresh/Pods-MJRefresh-prefix.pch
INSTALL_PATH
$(BUILT_PRODUCTS_DIR)
IPHONEOS_DEPLOYMENT_TARGET
7.0
+ OTHER_CFLAGS
+
+ -DNS_BLOCK_ASSERTIONS=1
+ $(inherited)
+
+ OTHER_CPLUSPLUSFLAGS
+
+ -DNS_BLOCK_ASSERTIONS=1
+ $(inherited)
+
OTHER_LDFLAGS
OTHER_LIBTOOLFLAGS
@@ -7221,66 +7247,130 @@
iphoneos
SKIP_INSTALL
YES
+ VALIDATE_PRODUCT
+ YES
isa
XCBuildConfiguration
name
- Debug
+ Release
+
+ FA1529D54F26EFCAE13119BE
+
+ fileRef
+ 2BA319B679FD7E5367F430C6
+ isa
+ PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
+
+ FA558F36CA5D6AE7D715CF7A
+
+ fileRef
+ 1740A3C059CD9E1542403D15
+ isa
+ PBXBuildFile
- FC5FC75F692847F3591B34B3
+ FA622950AEB141300BCA6B1F
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- text.script.sh
+ sourcecode.c.h
+ name
+ UIButton+WebCache.h
path
- Pods-resources.sh
+ SDWebImage/UIButton+WebCache.h
sourceTree
<group>
- FC77BBB341E0605E8ED130FB
+ FAA80B71B5EAE806B91F3C3A
fileRef
- A6D689B150BE62B7DB1AC767
+ 86EB9A08B9B6E1267BD57145
isa
PBXBuildFile
- FD317A4CDFFEF6932C841E62
+ FB68A1B10C381EEFC0E105CA
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.h
+ sourcecode.c.objc
name
- UIImage+MultiFormat.h
+ UIImageView+AFNetworking.m
path
- SDWebImage/UIImage+MultiFormat.h
+ UIKit+AFNetworking/UIImageView+AFNetworking.m
sourceTree
<group>
- FD93687F5220E28F92C0D41E
+ FB82277D905C9A6A87D36F9E
- includeInIndex
- 1
+ children
+
+ 52216402BFA370AED72D91F1
+ 766E6FD13340EAC7CA2A74C0
+ 5E76D0C8307E26EBB442C355
+ 60217EF2C452852C1A0BAB32
+
isa
- PBXFileReference
- lastKnownFileType
- sourcecode.c.objc
+ PBXGroup
name
- SDWebImageManager.m
+ Support Files
path
- SDWebImage/SDWebImageManager.m
+ ../Target Support Files/Pods-Shimmer
sourceTree
<group>
- FDAFE1F6255ECC888D7503AB
+ FB840FFD2E5B875EC18E84DE
+
+ fileRef
+ 22E579B322935331734637C9
+ isa
+ PBXBuildFile
+
+ FB8D9C35B856FEED38800CB1
+
+ buildActionMask
+ 2147483647
+ files
+
+ 84A9291CE1BE9DD63DB2034A
+ 8ABA1813E160CE5AB0761F51
+ E4CEE3D142701517931AC844
+ E1D5FA92C24CAD6F429DBC36
+ FA558F36CA5D6AE7D715CF7A
+ 5DFCBC9D949176E5760EC64E
+ 6C9BB6BBF80FB04842296734
+ 0CD662ED08D8060D2C191872
+ 842CCB76DC43252D77BC0631
+ 4850BE745D5CA828C6557D72
+ 59CCB50AEA5DFB9086E74FAE
+ F3527D318E9B0FE341C39FD3
+ C2F2047F3A09455A94637A0D
+ CF1457A202FBD3FC56768EB1
+ 08790C72DA11E17D2FBBCF0D
+ A93E13864D80CA2BBDF0CE3B
+ 038E0DFD617BDE9429BF052D
+ 06EFFA518FDEBA01C2EE99EE
+ 86E430012FC510D92AFD64FF
+
+ isa
+ PBXHeadersBuildPhase
+ runOnlyForDeploymentPostprocessing
+ 0
+
+ FBC45023CA1F858225841F8C
fileRef
- AADE27D38FBFB33465D0DA5F
+ 51AFD4B392A31A2289544A18
isa
PBXBuildFile
settings
@@ -7289,37 +7379,63 @@
-DOS_OBJECT_USE_OBJC=0
- FE4113033936F46AED1AC492
+ FC41A5A6C2DA7175CC3736A2
fileRef
- 217FA4FB15D4EDE83A84233D
+ 7E60A67D22F82309B3B23922
isa
PBXBuildFile
- FED8EC57D00423F3832AA2A9
+ FC6DA76B60E9169D68FB7BCB
fileRef
- AF131B236DD5AB2E742ADEF2
+ 516C932F9D2EA6FCFA72DA5C
isa
PBXBuildFile
- FFF0E1F586F1C9698F168012
+ FD73A2A295E8C736206A0CFB
includeInIndex
1
isa
PBXFileReference
lastKnownFileType
- sourcecode.c.objc
+ sourcecode.c.h
name
- FMDatabaseQueue.m
+ UIImageView+WebCache.h
path
- src/fmdb/FMDatabaseQueue.m
+ SDWebImage/UIImageView+WebCache.h
sourceTree
<group>
+ FDDB69BCEA27A3D2EAF6260B
+
+ fileRef
+ 815759C5B0D9D8181BED265B
+ isa
+ PBXBuildFile
+ settings
+
+ COMPILER_FLAGS
+ -DOS_OBJECT_USE_OBJC=0
+
+
+ FEAE6DA63CEC5559503A25DA
+
+ fileRef
+ E38AA2650B16052F84F74A50
+ isa
+ PBXBuildFile
+
+ FEEA599D4AD5EEB6BFEE8A7D
+
+ fileRef
+ BCE701251DF69F3F6F83B283
+ isa
+ PBXBuildFile
+
rootObject
- 003A31C6AADD74836B88341F
+ 81D979F3E87416F4B4516D5F
diff --git a/iOSStudy/Pods/SDWebImage/README.md b/iOSStudy/Pods/SDWebImage/README.md
index 9bbcca5..771c627 100644
--- a/iOSStudy/Pods/SDWebImage/README.md
+++ b/iOSStudy/Pods/SDWebImage/README.md
@@ -4,6 +4,8 @@ Web Image
[](http://cocoadocs.org/docsets/SDWebImage/)
[](http://cocoadocs.org/docsets/SDWebImage/)
[](https://www.apache.org/licenses/LICENSE-2.0.html)
+[](https://www.versioneye.com/objective-c/sdwebimage/3.3)
+[](https://www.versioneye.com/objective-c/sdwebimage/references)
This library provides a category for UIImageView with support for remote images coming from the web.
@@ -35,11 +37,11 @@ Find out [who uses SDWebImage](https://github.com/rs/SDWebImage/wiki/Who-Uses-SD
How To Use
----------
-API documentation is available at [http://hackemist.com/SDWebImage/doc/](http://hackemist.com/SDWebImage/doc/)
+API documentation is available at [CocoaDocs - SDWebImage](http://cocoadocs.org/docsets/SDWebImage/)
### Using UIImageView+WebCache category with UITableView
-Just #import the UIImageView+WebCache.h header, and call the setImageWithURL:placeholderImage:
+Just #import the UIImageView+WebCache.h header, and call the sd_setImageWithURL:placeholderImage:
method from the tableView:cellForRowAtIndexPath: UITableViewDataSource method. Everything will be
handled for you, from async downloads to caching management.
@@ -60,9 +62,9 @@ handled for you, from async downloads to caching management.
reuseIdentifier:MyIdentifier] autorelease];
}
- // Here we use the new provided setImageWithURL: method to load the web image
- [cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
- placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
+ // Here we use the new provided sd_setImageWithURL: method to load the web image
+ [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
+ placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
cell.textLabel.text = @"My Text";
return cell;
@@ -75,10 +77,10 @@ With blocks, you can be notified about the image download progress and whenever
has completed with success or not:
```objective-c
-// Here we use the new provided setImageWithURL: method to load the web image
-[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
- placeholderImage:[UIImage imageNamed:@"placeholder.png"]
- completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {... completion code here ...}];
+// Here we use the new provided sd_setImageWithURL: method to load the web image
+[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
+ placeholderImage:[UIImage imageNamed:@"placeholder.png"]
+ completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {... completion code here ...}];
```
Note: neither your success nor failure block will be call if your image request is canceled before completion.
@@ -93,19 +95,18 @@ Here is a simple example of how to use SDWebImageManager:
```objective-c
SDWebImageManager *manager = [SDWebImageManager sharedManager];
-[manager downloadWithURL:imageURL
- options:0
- progress:^(NSInteger receivedSize, NSInteger expectedSize)
- {
- // progression tracking code
- }
- completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished)
- {
- if (image)
- {
- // do something with image
- }
- }];
+[manager downloadImageWithURL:imageURL
+ options:0
+ progress:^(NSInteger receivedSize, NSInteger expectedSize)
+ {
+ // progression tracking code
+ }
+ completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL)
+ {
+ if (image) {
+ // do something with image
+ }
+ }];
```
### Using Asynchronous Image Downloader Independently
@@ -175,9 +176,8 @@ the URL before to use it as a cache key:
```objective-c
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
- SDWebImageManager.sharedManager.cacheKeyFilter:^(NSURL *url)
- {
- url = [[[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path] autorelease];
+ SDWebImageManager.sharedManager.cacheKeyFilter = ^(NSURL *url) {
+ url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path];
return [url absoluteString];
};
@@ -192,7 +192,7 @@ Common Problems
### Using dynamic image size with UITableViewCell
-UITableView determins the size of the image by the first image set for a cell. If your remote images
+UITableView determines the size of the image by the first image set for a cell. If your remote images
don't have the same size as your placeholder image, you may experience strange anamorphic scaling issue.
The following article gives a way to workaround this issue:
@@ -206,9 +206,9 @@ SDWebImage does very aggressive caching by default. It ignores all kind of cachi
If you don't control the image server you're using, you may not be able to change the URL when its content is updated. This is the case for Facebook avatar URLs for instance. In such case, you may use the `SDWebImageRefreshCached` flag. This will slightly degrade the performance but will respect the HTTP caching control headers:
``` objective-c
-[imageView setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/olivier.poitrey/picture"]
- placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"]
- options:SDWebImageRefreshCached];
+[imageView sd_setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/olivier.poitrey/picture"]
+ placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"]
+ options:SDWebImageRefreshCached];
```
### Add a progress indicator
@@ -233,6 +233,13 @@ platform :ios, '6.1'
pod 'SDWebImage', '~>3.6'
```
+### Installation by cloning the repository
+
+In order to gain access to all the files from the repository, you should clone it.
+```
+git clone --recursive https://github.com/rs/SDWebImage.git
+```
+
### Add the SDWebImage project to your project
- Download and unzip the last version of the framework from the [download page](https://github.com/rs/SDWebImage/releases)
@@ -252,11 +259,15 @@ Open the "Build Settings" tab, in the "Linking" section, locate the "Other Linke

Alternatively, if this causes compilation problems with frameworks that extend optional libraries, such as Parse, RestKit or opencv2, instead of the -ObjC flag use:
-
```
-force_load SDWebImage.framework/Versions/Current/SDWebImage
```
+If you're using Cocoa Pods and have any frameworks that extend optional libraries, such as Parsen RestKit or opencv2, instead of the -ObjC flag use:
+```
+-force_load $(TARGET_BUILD_DIR)/libPods.a
+```
+
### Import headers in your source files
In the source files where you need to use the library, import the header file:
diff --git a/iOSStudy/Pods/SDWebImage/SDWebImage/SDImageCache.h b/iOSStudy/Pods/SDWebImage/SDWebImage/SDImageCache.h
index bde9d5d..f639dd6 100644
--- a/iOSStudy/Pods/SDWebImage/SDWebImage/SDImageCache.h
+++ b/iOSStudy/Pods/SDWebImage/SDWebImage/SDImageCache.h
@@ -36,6 +36,12 @@ typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger tot
*/
@interface SDImageCache : NSObject
+/**
+ * Decompressing images that are downloaded and cached can improve peformance but can consume lot of memory.
+ * Defaults to YES. Set this to NO if you are experiencing a crash due to excessive memory consumption.
+ */
+@property (assign, nonatomic) BOOL shouldDecompressImages;
+
/**
* The maximum "total cost" of the in-memory image cache. The cost function is the number of pixels held in memory.
*/
@@ -136,7 +142,7 @@ typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger tot
* Remove the image from memory and disk cache synchronously
*
* @param key The unique image cache key
- * @param completionBlock An block that should be executed after the image has been removed (optional)
+ * @param completion An block that should be executed after the image has been removed (optional)
*/
- (void)removeImageForKey:(NSString *)key withCompletion:(SDWebImageNoParamsBlock)completion;
@@ -153,7 +159,7 @@ typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger tot
*
* @param key The unique image cache key
* @param fromDisk Also remove cache entry from disk if YES
- * @param completionBlock An block that should be executed after the image has been removed (optional)
+ * @param completion An block that should be executed after the image has been removed (optional)
*/
- (void)removeImageForKey:(NSString *)key fromDisk:(BOOL)fromDisk withCompletion:(SDWebImageNoParamsBlock)completion;
@@ -164,7 +170,7 @@ typedef void(^SDWebImageCalculateSizeBlock)(NSUInteger fileCount, NSUInteger tot
/**
* Clear all disk cached images. Non-blocking method - returns immediately.
- * @param completionBlock An block that should be executed after cache expiration completes (optional)
+ * @param completion An block that should be executed after cache expiration completes (optional)
*/
- (void)clearDiskOnCompletion:(SDWebImageNoParamsBlock)completion;
diff --git a/iOSStudy/Pods/SDWebImage/SDWebImage/SDImageCache.m b/iOSStudy/Pods/SDWebImage/SDWebImage/SDImageCache.m
index 59c3471..0052903 100644
--- a/iOSStudy/Pods/SDWebImage/SDWebImage/SDImageCache.m
+++ b/iOSStudy/Pods/SDWebImage/SDWebImage/SDImageCache.m
@@ -48,7 +48,6 @@ + (SDImageCache *)sharedImageCache {
static id instance;
dispatch_once(&once, ^{
instance = [self new];
- kPNGSignatureData = [NSData dataWithBytes:kPNGSignatureBytes length:8];
});
return instance;
}
@@ -61,6 +60,9 @@ - (id)initWithNamespace:(NSString *)ns {
if ((self = [super init])) {
NSString *fullNamespace = [@"com.hackemist.SDWebImageCache." stringByAppendingString:ns];
+ // initialise PNG signature data
+ kPNGSignatureData = [NSData dataWithBytes:kPNGSignatureBytes length:8];
+
// Create IO serial queue
_ioQueue = dispatch_queue_create("com.hackemist.SDWebImageCache", DISPATCH_QUEUE_SERIAL);
@@ -75,6 +77,9 @@ - (id)initWithNamespace:(NSString *)ns {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
_diskCachePath = [paths[0] stringByAppendingPathComponent:fullNamespace];
+ // Set decompression to YES
+ _shouldDecompressImages = YES;
+
dispatch_sync(_ioQueue, ^{
_fileManager = [NSFileManager new];
});
@@ -147,7 +152,7 @@ - (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate image
return;
}
- [self.memCache setObject:image forKey:key cost:image.size.height * image.size.width * image.scale];
+ [self.memCache setObject:image forKey:key cost:image.size.height * image.size.width * image.scale * image.scale];
if (toDisk) {
dispatch_async(self.ioQueue, ^{
@@ -234,7 +239,7 @@ - (UIImage *)imageFromDiskCacheForKey:(NSString *)key {
// Second check the disk cache...
UIImage *diskImage = [self diskImageForKey:key];
if (diskImage) {
- CGFloat cost = diskImage.size.height * diskImage.size.width * diskImage.scale;
+ CGFloat cost = diskImage.size.height * diskImage.size.width * diskImage.scale * diskImage.scale;
[self.memCache setObject:diskImage forKey:key cost:cost];
}
@@ -264,7 +269,9 @@ - (UIImage *)diskImageForKey:(NSString *)key {
if (data) {
UIImage *image = [UIImage sd_imageWithData:data];
image = [self scaledImageForKey:key image:image];
- image = [UIImage decodedImageWithImage:image];
+ if (self.shouldDecompressImages) {
+ image = [UIImage decodedImageWithImage:image];
+ }
return image;
}
else {
@@ -302,7 +309,7 @@ - (NSOperation *)queryDiskCacheForKey:(NSString *)key done:(SDWebImageQueryCompl
@autoreleasepool {
UIImage *diskImage = [self diskImageForKey:key];
if (diskImage) {
- CGFloat cost = diskImage.size.height * diskImage.size.width * diskImage.scale;
+ CGFloat cost = diskImage.size.height * diskImage.size.width * diskImage.scale * diskImage.scale;
[self.memCache setObject:diskImage forKey:key cost:cost];
}
diff --git a/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h b/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h
index 008231a..b8db86f 100644
--- a/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h
+++ b/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.h
@@ -49,8 +49,6 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) {
* Put the image in the high priority queue.
*/
SDWebImageDownloaderHighPriority = 1 << 7,
-
-
};
typedef NS_ENUM(NSInteger, SDWebImageDownloaderExecutionOrder) {
@@ -79,12 +77,17 @@ typedef NSDictionary *(^SDWebImageDownloaderHeadersFilterBlock)(NSURL *url, NSDi
*/
@interface SDWebImageDownloader : NSObject
+/**
+ * Decompressing images that are downloaded and cached can improve peformance but can consume lot of memory.
+ * Defaults to YES. Set this to NO if you are experiencing a crash due to excessive memory consumption.
+ */
+@property (assign, nonatomic) BOOL shouldDecompressImages;
+
@property (assign, nonatomic) NSInteger maxConcurrentDownloads;
/**
* Shows the current amount of downloads that still need to be downloaded
*/
-
@property (readonly, nonatomic) NSUInteger currentDownloadCount;
@@ -139,6 +142,16 @@ typedef NSDictionary *(^SDWebImageDownloaderHeadersFilterBlock)(NSURL *url, NSDi
*/
- (NSString *)valueForHTTPHeaderField:(NSString *)field;
+/**
+ * Sets a subclass of `SDWebImageDownloaderOperation` as the default
+ * `NSOperation` to be used each time SDWebImage constructs a request
+ * operation to download an image.
+ *
+ * @param operationClass The subclass of `SDWebImageDownloaderOperation` to set
+ * as default. Passing `nil` will revert to `SDWebImageDownloaderOperation`.
+ */
+- (void)setOperationClass:(Class)operationClass;
+
/**
* Creates a SDWebImageDownloader async downloader instance with a given URL
*
diff --git a/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m b/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m
index 60914db..aa3f1cb 100644
--- a/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m
+++ b/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageDownloader.m
@@ -20,6 +20,7 @@ @interface SDWebImageDownloader ()
@property (strong, nonatomic) NSOperationQueue *downloadQueue;
@property (weak, nonatomic) NSOperation *lastAddedOperation;
+@property (assign, nonatomic) Class operationClass;
@property (strong, nonatomic) NSMutableDictionary *URLCallbacks;
@property (strong, nonatomic) NSMutableDictionary *HTTPHeaders;
// This queue is used to serialize the handling of the network responses of all the download operation in a single queue
@@ -63,9 +64,11 @@ + (SDWebImageDownloader *)sharedDownloader {
- (id)init {
if ((self = [super init])) {
+ _operationClass = [SDWebImageDownloaderOperation class];
+ _shouldDecompressImages = YES;
_executionOrder = SDWebImageDownloaderFIFOExecutionOrder;
_downloadQueue = [NSOperationQueue new];
- _downloadQueue.maxConcurrentOperationCount = 2;
+ _downloadQueue.maxConcurrentOperationCount = 6;
_URLCallbacks = [NSMutableDictionary new];
_HTTPHeaders = [NSMutableDictionary dictionaryWithObject:@"image/webp,image/*;q=0.8" forKey:@"Accept"];
_barrierQueue = dispatch_queue_create("com.hackemist.SDWebImageDownloaderBarrierQueue", DISPATCH_QUEUE_CONCURRENT);
@@ -104,6 +107,10 @@ - (NSInteger)maxConcurrentDownloads {
return _downloadQueue.maxConcurrentOperationCount;
}
+- (void)setOperationClass:(Class)operationClass {
+ _operationClass = operationClass ?: [SDWebImageDownloaderOperation class];
+}
+
- (id )downloadImageWithURL:(NSURL *)url options:(SDWebImageDownloaderOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageDownloaderCompletedBlock)completedBlock {
__block SDWebImageDownloaderOperation *operation;
__weak SDWebImageDownloader *wself = self;
@@ -124,34 +131,43 @@ - (NSInteger)maxConcurrentDownloads {
else {
request.allHTTPHeaderFields = wself.HTTPHeaders;
}
- operation = [[SDWebImageDownloaderOperation alloc] initWithRequest:request
- options:options
- progress:^(NSInteger receivedSize, NSInteger expectedSize) {
- SDWebImageDownloader *sself = wself;
- if (!sself) return;
- NSArray *callbacksForURL = [sself callbacksForURL:url];
- for (NSDictionary *callbacks in callbacksForURL) {
- SDWebImageDownloaderProgressBlock callback = callbacks[kProgressCallbackKey];
- if (callback) callback(receivedSize, expectedSize);
- }
- }
- completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
- SDWebImageDownloader *sself = wself;
- if (!sself) return;
- NSArray *callbacksForURL = [sself callbacksForURL:url];
- if (finished) {
- [sself removeCallbacksForURL:url];
- }
- for (NSDictionary *callbacks in callbacksForURL) {
- SDWebImageDownloaderCompletedBlock callback = callbacks[kCompletedCallbackKey];
- if (callback) callback(image, data, error, finished);
- }
- }
- cancelled:^{
- SDWebImageDownloader *sself = wself;
- if (!sself) return;
- [sself removeCallbacksForURL:url];
- }];
+ operation = [[wself.operationClass alloc] initWithRequest:request
+ options:options
+ progress:^(NSInteger receivedSize, NSInteger expectedSize) {
+ SDWebImageDownloader *sself = wself;
+ if (!sself) return;
+ __block NSArray *callbacksForURL;
+ dispatch_sync(sself.barrierQueue, ^{
+ callbacksForURL = [sself.URLCallbacks[url] copy];
+ });
+ for (NSDictionary *callbacks in callbacksForURL) {
+ SDWebImageDownloaderProgressBlock callback = callbacks[kProgressCallbackKey];
+ if (callback) callback(receivedSize, expectedSize);
+ }
+ }
+ completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
+ SDWebImageDownloader *sself = wself;
+ if (!sself) return;
+ __block NSArray *callbacksForURL;
+ dispatch_barrier_sync(sself.barrierQueue, ^{
+ callbacksForURL = [sself.URLCallbacks[url] copy];
+ if (finished) {
+ [sself.URLCallbacks removeObjectForKey:url];
+ }
+ });
+ for (NSDictionary *callbacks in callbacksForURL) {
+ SDWebImageDownloaderCompletedBlock callback = callbacks[kCompletedCallbackKey];
+ if (callback) callback(image, data, error, finished);
+ }
+ }
+ cancelled:^{
+ SDWebImageDownloader *sself = wself;
+ if (!sself) return;
+ dispatch_barrier_async(sself.barrierQueue, ^{
+ [sself.URLCallbacks removeObjectForKey:url];
+ });
+ }];
+ operation.shouldDecompressImages = wself.shouldDecompressImages;
if (wself.username && wself.password) {
operation.credential = [NSURLCredential credentialWithUser:wself.username password:wself.password persistence:NSURLCredentialPersistenceForSession];
@@ -204,20 +220,6 @@ - (void)addProgressCallback:(SDWebImageDownloaderProgressBlock)progressBlock and
});
}
-- (NSArray *)callbacksForURL:(NSURL *)url {
- __block NSArray *callbacksForURL;
- dispatch_sync(self.barrierQueue, ^{
- callbacksForURL = self.URLCallbacks[url];
- });
- return [callbacksForURL copy];
-}
-
-- (void)removeCallbacksForURL:(NSURL *)url {
- dispatch_barrier_async(self.barrierQueue, ^{
- [self.URLCallbacks removeObjectForKey:url];
- });
-}
-
- (void)setSuspended:(BOOL)suspended {
[self.downloadQueue setSuspended:suspended];
}
diff --git a/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h b/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h
index 21a3106..fd70b48 100644
--- a/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h
+++ b/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h
@@ -17,6 +17,9 @@
*/
@property (strong, nonatomic, readonly) NSURLRequest *request;
+
+@property (assign, nonatomic) BOOL shouldDecompressImages;
+
/**
* Whether the URL connection should consult the credential storage for authenticating the connection. `YES` by default.
*
diff --git a/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m b/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m
index 333e316..025a080 100644
--- a/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m
+++ b/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageDownloaderOperation.m
@@ -47,6 +47,7 @@ - (id)initWithRequest:(NSURLRequest *)request
cancelled:(SDWebImageNoParamsBlock)cancelBlock {
if ((self = [super init])) {
_request = request;
+ _shouldDecompressImages = YES;
_shouldUseCredentialStorage = YES;
_options = options;
_progressBlock = [progressBlock copy];
@@ -95,7 +96,9 @@ - (void)start {
if (self.progressBlock) {
self.progressBlock(0, NSURLResponseUnknownLength);
}
- [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStartNotification object:self];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStartNotification object:self];
+ });
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_5_1) {
// Make sure to run the runloop in our background thread so it can process downloaded data
@@ -150,7 +153,9 @@ - (void)cancelInternal {
if (self.connection) {
[self.connection cancel];
- [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self];
+ });
// As we cancelled the connection, its callback won't be called and thus won't
// maintain the isFinished and isExecuting flags.
@@ -195,7 +200,9 @@ - (BOOL)isConcurrent {
#pragma mark NSURLConnection (delegate)
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
- if (![response respondsToSelector:@selector(statusCode)] || [((NSHTTPURLResponse *)response) statusCode] < 400) {
+
+ //'304 Not Modified' is an exceptional one
+ if ((![response respondsToSelector:@selector(statusCode)] || [((NSHTTPURLResponse *)response) statusCode] < 400) && [((NSHTTPURLResponse *)response) statusCode] != 304) {
NSInteger expected = response.expectedContentLength > 0 ? (NSInteger)response.expectedContentLength : 0;
self.expectedSize = expected;
if (self.progressBlock) {
@@ -205,9 +212,18 @@ - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLRespon
self.imageData = [[NSMutableData alloc] initWithCapacity:expected];
}
else {
- [self.connection cancel];
-
- [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:nil];
+ NSUInteger code = [((NSHTTPURLResponse *)response) statusCode];
+
+ //This is the case when server returns '304 Not Modified'. It means that remote image is not changed.
+ //In case of 304 we need just cancel the operation and return cached image from the cache.
+ if (code == 304) {
+ [self cancelInternal];
+ } else {
+ [self.connection cancel];
+ }
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:nil];
+ });
if (self.completedBlock) {
self.completedBlock(nil, nil, [NSError errorWithDomain:NSURLErrorDomain code:[((NSHTTPURLResponse *)response) statusCode] userInfo:nil], YES);
@@ -228,8 +244,7 @@ - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
const NSInteger totalSize = self.imageData.length;
// Update the data source, we must pass ALL the data, not just the new bytes
- CGImageSourceRef imageSource = CGImageSourceCreateIncremental(NULL);
- CGImageSourceUpdateData(imageSource, (__bridge CFDataRef)self.imageData, totalSize == self.expectedSize);
+ CGImageSourceRef imageSource = CGImageSourceCreateWithData((__bridge CFDataRef)self.imageData, NULL);
if (width + height == 0) {
CFDictionaryRef properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, NULL);
@@ -280,7 +295,12 @@ - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
UIImage *image = [UIImage imageWithCGImage:partialImageRef scale:1 orientation:orientation];
NSString *key = [[SDWebImageManager sharedManager] cacheKeyForURL:self.request.URL];
UIImage *scaledImage = [self scaledImageForKey:key image:image];
- image = [UIImage decodedImageWithImage:scaledImage];
+ if (self.shouldDecompressImages) {
+ image = [UIImage decodedImageWithImage:scaledImage];
+ }
+ else {
+ image = scaledImage;
+ }
CGImageRelease(partialImageRef);
dispatch_main_sync_safe(^{
if (self.completedBlock) {
@@ -331,15 +351,16 @@ - (void)connectionDidFinishLoading:(NSURLConnection *)aConnection {
CFRunLoopStop(CFRunLoopGetCurrent());
self.thread = nil;
self.connection = nil;
- [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:nil];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:nil];
+ });
}
if (![[NSURLCache sharedURLCache] cachedResponseForRequest:_request]) {
responseFromCached = NO;
}
- if (completionBlock)
- {
+ if (completionBlock) {
if (self.options & SDWebImageDownloaderIgnoreCachedResponse && responseFromCached) {
completionBlock(nil, nil, nil, YES);
}
@@ -350,7 +371,9 @@ - (void)connectionDidFinishLoading:(NSURLConnection *)aConnection {
// Do not force decoding animated GIFs
if (!image.images) {
- image = [UIImage decodedImageWithImage:image];
+ if (self.shouldDecompressImages) {
+ image = [UIImage decodedImageWithImage:image];
+ }
}
if (CGSizeEqualToSize(image.size, CGSizeZero)) {
completionBlock(nil, nil, [NSError errorWithDomain:@"SDWebImageErrorDomain" code:0 userInfo:@{NSLocalizedDescriptionKey : @"Downloaded image has 0 pixels"}], YES);
@@ -365,13 +388,19 @@ - (void)connectionDidFinishLoading:(NSURLConnection *)aConnection {
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
- CFRunLoopStop(CFRunLoopGetCurrent());
- [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:nil];
+ @synchronized(self) {
+ CFRunLoopStop(CFRunLoopGetCurrent());
+ self.thread = nil;
+ self.connection = nil;
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:nil];
+ });
+ }
if (self.completedBlock) {
self.completedBlock(nil, nil, error, YES);
}
-
+ self.completionBlock = nil;
[self done];
}
@@ -396,8 +425,13 @@ - (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection __unused *)connect
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge{
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
- NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
- [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
+ if (!(self.options & SDWebImageDownloaderAllowInvalidSSLCertificates) &&
+ [challenge.sender respondsToSelector:@selector(performDefaultHandlingForAuthenticationChallenge:)]) {
+ [challenge.sender performDefaultHandlingForAuthenticationChallenge:challenge];
+ } else {
+ NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
+ [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
+ }
} else {
if ([challenge previousFailureCount] == 0) {
if (self.credential) {
diff --git a/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageManager.h b/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageManager.h
index 6bb0dcf..9a630a7 100644
--- a/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageManager.h
+++ b/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageManager.h
@@ -74,7 +74,14 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) {
* By default, placeholder images are loaded while the image is loading. This flag will delay the loading
* of the placeholder image until after the image has finished loading.
*/
- SDWebImageDelayPlaceholder = 1 << 9
+ SDWebImageDelayPlaceholder = 1 << 9,
+
+ /**
+ * We usually don't call transformDownloadedImage delegate method on animated images,
+ * as most transformation code would mangle it.
+ * Use this flag to transform them anyway.
+ */
+ SDWebImageTransformAnimatedImage = 1 << 10,
};
typedef void(^SDWebImageCompletionBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL);
@@ -159,7 +166,7 @@ SDWebImageManager *manager = [SDWebImageManager sharedManager];
* @endcode
*/
-@property (copy) SDWebImageCacheKeyFilterBlock cacheKeyFilter;
+@property (nonatomic, copy) SDWebImageCacheKeyFilterBlock cacheKeyFilter;
/**
* Returns global SDWebImageManager instance.
diff --git a/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageManager.m b/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageManager.m
index 2781ec8..24167c1 100644
--- a/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageManager.m
+++ b/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImageManager.m
@@ -112,7 +112,7 @@ - (void)diskImageExistsForURL:(NSURL *)url
progress:(SDWebImageDownloaderProgressBlock)progressBlock
completed:(SDWebImageCompletionWithFinishedBlock)completedBlock {
// Invoking this method without a completedBlock is pointless
- NSParameterAssert(completedBlock);
+ NSAssert(completedBlock != nil, @"If you mean to prefetch the image, use -[SDWebImagePrefetcher prefetchURLs] instead");
// Very common mistake is to send the URL using NSString object instead of NSURL. For some strange reason, XCode won't
// throw any warning for this type mismatch. Here we failsafe this error by allowing URLs to be passed as NSString.
@@ -194,7 +194,9 @@ - (void)diskImageExistsForURL:(NSURL *)url
if (error.code != NSURLErrorNotConnectedToInternet && error.code != NSURLErrorCancelled && error.code != NSURLErrorTimedOut) {
@synchronized (self.failedURLs) {
- [self.failedURLs addObject:url];
+ if (![self.failedURLs containsObject:url]) {
+ [self.failedURLs addObject:url];
+ }
}
}
}
@@ -204,8 +206,7 @@ - (void)diskImageExistsForURL:(NSURL *)url
if (options & SDWebImageRefreshCached && image && !downloadedImage) {
// Image refresh hit the NSURLCache cache, do not call the completion block
}
- // NOTE: We don't call transformDownloadedImage delegate method on animated images as most transformation code would mangle it
- else if (downloadedImage && !downloadedImage.images && [self.delegate respondsToSelector:@selector(imageManager:transformDownloadedImage:withURL:)]) {
+ else if (downloadedImage && (!downloadedImage.images || (options & SDWebImageTransformAnimatedImage)) && [self.delegate respondsToSelector:@selector(imageManager:transformDownloadedImage:withURL:)]) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
UIImage *transformedImage = [self.delegate imageManager:self transformDownloadedImage:downloadedImage withURL:url];
@@ -283,8 +284,9 @@ - (void)saveImageToCache:(UIImage *)image forURL:(NSURL *)url {
- (void)cancelAll {
@synchronized (self.runningOperations) {
- [self.runningOperations makeObjectsPerformSelector:@selector(cancel)];
- [self.runningOperations removeAllObjects];
+ NSArray *copiedOperations = [self.runningOperations copy];
+ [copiedOperations makeObjectsPerformSelector:@selector(cancel)];
+ [self.runningOperations removeObjectsInArray:copiedOperations];
}
}
diff --git a/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h b/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h
index 4f14fa2..7bb67ac 100644
--- a/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h
+++ b/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.h
@@ -58,6 +58,11 @@ typedef void(^SDWebImagePrefetcherCompletionBlock)(NSUInteger noOfFinishedUrls,
*/
@property (nonatomic, assign) SDWebImageOptions options;
+/**
+ * Queue options for Prefetcher. Defaults to Main Queue.
+ */
+@property (nonatomic, assign) dispatch_queue_t prefetcherQueue;
+
@property (weak, nonatomic) id delegate;
/**
diff --git a/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m b/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m
index 4087e4a..235a0a5 100644
--- a/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m
+++ b/iOSStudy/Pods/SDWebImage/SDWebImage/SDWebImagePrefetcher.m
@@ -8,7 +8,7 @@
#import "SDWebImagePrefetcher.h"
-#if !defined(DEBUG) && !defined (SD_VERBOSE)
+#if (!defined(DEBUG) && !defined (SD_VERBOSE)) || defined(SD_LOG_NONE)
#define NSLog(...)
#endif
@@ -40,6 +40,7 @@ - (id)init {
if ((self = [super init])) {
_manager = [SDWebImageManager new];
_options = SDWebImageLowPriority;
+ _prefetcherQueue = dispatch_get_main_queue();
self.maxConcurrentDownloads = 3;
}
return self;
@@ -82,9 +83,8 @@ - (void)startPrefetchingAtIndex:(NSUInteger)index {
totalCount:self.prefetchURLs.count
];
}
-
if (self.prefetchURLs.count > self.requestedCount) {
- dispatch_async(dispatch_get_main_queue(), ^{
+ dispatch_async(self.prefetcherQueue, ^{
[self startPrefetchingAtIndex:self.requestedCount];
});
}
@@ -120,10 +120,16 @@ - (void)prefetchURLs:(NSArray *)urls progress:(SDWebImagePrefetcherProgressBlock
self.completionBlock = completionBlock;
self.progressBlock = progressBlock;
- // Starts prefetching from the very first image on the list with the max allowed concurrency
- NSUInteger listCount = self.prefetchURLs.count;
- for (NSUInteger i = 0; i < self.maxConcurrentDownloads && self.requestedCount < listCount; i++) {
- [self startPrefetchingAtIndex:i];
+ if(urls.count == 0){
+ if(completionBlock){
+ completionBlock(0,0);
+ }
+ }else{
+ // Starts prefetching from the very first image on the list with the max allowed concurrency
+ NSUInteger listCount = self.prefetchURLs.count;
+ for (NSUInteger i = 0; i < self.maxConcurrentDownloads && self.requestedCount < listCount; i++) {
+ [self startPrefetchingAtIndex:i];
+ }
}
}
diff --git a/iOSStudy/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h b/iOSStudy/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h
index 7a6e867..48ad0d5 100644
--- a/iOSStudy/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h
+++ b/iOSStudy/Pods/SDWebImage/SDWebImage/UIButton+WebCache.h
@@ -70,8 +70,8 @@
* @param completedBlock A block called when operation has been completed. This block has no return value
* and takes the requested UIImage as first parameter. In case of error the image parameter
* is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- * indicating if the image was retrived from the local cache of from the network.
- * The forth parameter is the original image url.
+ * indicating if the image was retrived from the local cache or from the network.
+ * The fourth parameter is the original image url.
*/
- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock;
@@ -86,8 +86,8 @@
* @param completedBlock A block called when operation has been completed. This block has no return value
* and takes the requested UIImage as first parameter. In case of error the image parameter
* is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- * indicating if the image was retrived from the local cache of from the network.
- * The forth parameter is the original image url.
+ * indicating if the image was retrived from the local cache or from the network.
+ * The fourth parameter is the original image url.
*/
- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock;
@@ -103,8 +103,8 @@
* @param completedBlock A block called when operation has been completed. This block has no return value
* and takes the requested UIImage as first parameter. In case of error the image parameter
* is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- * indicating if the image was retrived from the local cache of from the network.
- * The forth parameter is the original image url.
+ * indicating if the image was retrived from the local cache or from the network.
+ * The fourth parameter is the original image url.
*/
- (void)sd_setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;
@@ -152,8 +152,8 @@
* @param completedBlock A block called when operation has been completed. This block has no return value
* and takes the requested UIImage as first parameter. In case of error the image parameter
* is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- * indicating if the image was retrived from the local cache of from the network.
- * The forth parameter is the original image url.
+ * indicating if the image was retrived from the local cache or from the network.
+ * The fourth parameter is the original image url.
*/
- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state completed:(SDWebImageCompletionBlock)completedBlock;
@@ -168,8 +168,8 @@
* @param completedBlock A block called when operation has been completed. This block has no return value
* and takes the requested UIImage as first parameter. In case of error the image parameter
* is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- * indicating if the image was retrived from the local cache of from the network.
- * The forth parameter is the original image url.
+ * indicating if the image was retrived from the local cache or from the network.
+ * The fourth parameter is the original image url.
*/
- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock;
@@ -184,8 +184,8 @@
* @param completedBlock A block called when operation has been completed. This block has no return value
* and takes the requested UIImage as first parameter. In case of error the image parameter
* is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- * indicating if the image was retrived from the local cache of from the network.
- * The forth parameter is the original image url.
+ * indicating if the image was retrived from the local cache or from the network.
+ * The fourth parameter is the original image url.
*/
- (void)sd_setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;
diff --git a/iOSStudy/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h b/iOSStudy/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h
index 6b00366..57f708f 100644
--- a/iOSStudy/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h
+++ b/iOSStudy/Pods/SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h
@@ -43,8 +43,8 @@
* @param completedBlock A block called when operation has been completed. This block has no return value
* and takes the requested UIImage as first parameter. In case of error the image parameter
* is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- * indicating if the image was retrived from the local cache of from the network.
- * The forth parameter is the original image url.
+ * indicating if the image was retrived from the local cache or from the network.
+ * The fourth parameter is the original image url.
*/
- (void)sd_setHighlightedImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock;
@@ -58,8 +58,8 @@
* @param completedBlock A block called when operation has been completed. This block has no return value
* and takes the requested UIImage as first parameter. In case of error the image parameter
* is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- * indicating if the image was retrived from the local cache of from the network.
- * The forth parameter is the original image url.
+ * indicating if the image was retrived from the local cache or from the network.
+ * The fourth parameter is the original image url.
*/
- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;
@@ -74,8 +74,8 @@
* @param completedBlock A block called when operation has been completed. This block has no return value
* and takes the requested UIImage as first parameter. In case of error the image parameter
* is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- * indicating if the image was retrived from the local cache of from the network.
- * The forth parameter is the original image url.
+ * indicating if the image was retrived from the local cache or from the network.
+ * The fourth parameter is the original image url.
*/
- (void)sd_setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock;
diff --git a/iOSStudy/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h b/iOSStudy/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h
index 717d393..e7489f4 100644
--- a/iOSStudy/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h
+++ b/iOSStudy/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.h
@@ -92,8 +92,8 @@
* @param completedBlock A block called when operation has been completed. This block has no return value
* and takes the requested UIImage as first parameter. In case of error the image parameter
* is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- * indicating if the image was retrived from the local cache of from the network.
- * The forth parameter is the original image url.
+ * indicating if the image was retrived from the local cache or from the network.
+ * The fourth parameter is the original image url.
*/
- (void)sd_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock;
@@ -107,8 +107,8 @@
* @param completedBlock A block called when operation has been completed. This block has no return value
* and takes the requested UIImage as first parameter. In case of error the image parameter
* is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- * indicating if the image was retrived from the local cache of from the network.
- * The forth parameter is the original image url.
+ * indicating if the image was retrived from the local cache or from the network.
+ * The fourth parameter is the original image url.
*/
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock;
@@ -123,8 +123,8 @@
* @param completedBlock A block called when operation has been completed. This block has no return value
* and takes the requested UIImage as first parameter. In case of error the image parameter
* is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- * indicating if the image was retrived from the local cache of from the network.
- * The forth parameter is the original image url.
+ * indicating if the image was retrived from the local cache or from the network.
+ * The fourth parameter is the original image url.
*/
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;
@@ -140,8 +140,8 @@
* @param completedBlock A block called when operation has been completed. This block has no return value
* and takes the requested UIImage as first parameter. In case of error the image parameter
* is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- * indicating if the image was retrived from the local cache of from the network.
- * The forth parameter is the original image url.
+ * indicating if the image was retrived from the local cache or from the network.
+ * The fourth parameter is the original image url.
*/
- (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock;
@@ -157,8 +157,8 @@
* @param completedBlock A block called when operation has been completed. This block has no return value
* and takes the requested UIImage as first parameter. In case of error the image parameter
* is nil and the second parameter may contain an NSError. The third parameter is a Boolean
- * indicating if the image was retrived from the local cache of from the network.
- * The forth parameter is the original image url.
+ * indicating if the image was retrived from the local cache or from the network.
+ * The fourth parameter is the original image url.
*/
- (void)sd_setImageWithPreviousCachedImageWithURL:(NSURL *)url andPlaceholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock;
diff --git a/iOSStudy/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m b/iOSStudy/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m
index 51663dd..1e225eb 100644
--- a/iOSStudy/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m
+++ b/iOSStudy/Pods/SDWebImage/SDWebImage/UIImageView+WebCache.m
@@ -43,7 +43,9 @@ - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder
objc_setAssociatedObject(self, &imageURLKey, url, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
if (!(options & SDWebImageDelayPlaceholder)) {
- self.image = placeholder;
+ dispatch_main_async_safe(^{
+ self.image = placeholder;
+ });
}
if (url) {
diff --git a/iOSStudy/Pods/SVProgressHUD/README.md b/iOSStudy/Pods/SVProgressHUD/README.md
index 214d2a4..10ca5bf 100644
--- a/iOSStudy/Pods/SVProgressHUD/README.md
+++ b/iOSStudy/Pods/SVProgressHUD/README.md
@@ -22,6 +22,12 @@ pod 'SVProgressHUD', :head
This pulls from the `master` branch directly. We are usually careful about what we push there and this is the version we use ourselves in all of our projects.
+### Carthage
+
+[](https://github.com/TransitApp/SVProgressHUD)
+
+You can install SVProgressHUD with Carthage
+
### Manually
* Drag the `SVProgressHUD/SVProgressHUD` folder into your project.
@@ -109,6 +115,7 @@ Or show a confirmation glyph before before getting dismissed a little bit later.
+ (void)setSuccessImage:(UIImage*)image; // default is bundled success image from Freepik
+ (void)setErrorImage:(UIImage*)image; // default is bundled error image from Freepik
+ (void)setDefaultMaskType:(SVProgressHUDMaskType)maskType; // default is SVProgressHUDMaskTypeNone
++ (void)setViewForExtension:(UIView*)view; // default is nil, only used if #define SV_APP_EXTENSIONS is set
```
## Notifications
@@ -123,6 +130,10 @@ Each notification passes a `userInfo` dictionary holding the HUD's status string
`SVProgressHUD` also posts `SVProgressHUDDidReceiveTouchEventNotification` when users touch on the overall screen or `SVProgressHUDDidTouchDownInsideNotification` when a user touches on the HUD directly. For this notifications `userInfo` is not passed but the object parameter contains the `UIEvent` that related to the touch.
+## App Extensions
+
+When using `SVProgressHUD` in an App Extension, #define SV_APP_EXTENSIONS to avoid using unavailable APIs. Additionally call `setViewForExtension:` from your extensions view controller with `self.view`.
+
## Contributing to this project
If you have feature requests or bug reports, feel free to help out by sending pull requests or by [creating new issues](https://github.com/samvermette/SVProgressHUD/issues/new). Please take a moment to
diff --git a/iOSStudy/Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.m b/iOSStudy/Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.m
index 7cad180..2a74fbb 100644
--- a/iOSStudy/Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.m
+++ b/iOSStudy/Pods/SVProgressHUD/SVProgressHUD/SVIndefiniteAnimatedView.m
@@ -56,7 +56,13 @@ - (CAShapeLayer*)indefiniteAnimatedLayer {
_indefiniteAnimatedLayer.path = smoothedPath.CGPath;
CALayer *maskLayer = [CALayer layer];
- maskLayer.contents = (id)[[UIImage imageNamed:@"SVProgressHUD.bundle/angle-mask"] CGImage];
+
+ NSBundle *bundle = [NSBundle bundleForClass:self.class];
+ NSURL *url = [bundle URLForResource:@"SVProgressHUD" withExtension:@"bundle"];
+ NSBundle *imageBundle = [NSBundle bundleWithURL:url];
+ NSString *path = [imageBundle pathForResource:@"angle-mask" ofType:@"png"];
+
+ maskLayer.contents = (id)[[UIImage imageWithContentsOfFile:path] CGImage];;
maskLayer.frame = _indefiniteAnimatedLayer.bounds;
_indefiniteAnimatedLayer.mask = maskLayer;
diff --git a/iOSStudy/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h b/iOSStudy/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h
index da2992d..c916ff4 100644
--- a/iOSStudy/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h
+++ b/iOSStudy/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h
@@ -37,6 +37,7 @@ typedef NS_ENUM(NSUInteger, SVProgressHUDMaskType) {
+ (void)setSuccessImage:(UIImage*)image; // default is the bundled success image provided by Freepik
+ (void)setErrorImage:(UIImage*)image; // default is the bundled error image provided by Freepik
+ (void)setDefaultMaskType:(SVProgressHUDMaskType)maskType; // default is SVProgressHUDMaskTypeNone
++ (void)setViewForExtension:(UIView*)view; // default is nil, only used if #define SV_APP_EXTENSIONS is set
#pragma mark - Show Methods
diff --git a/iOSStudy/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.m b/iOSStudy/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.m
index 43c6c6a..1d735d2 100644
--- a/iOSStudy/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.m
+++ b/iOSStudy/Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.m
@@ -31,6 +31,7 @@
static UIImage *SVProgressHUDSuccessImage;
static UIImage *SVProgressHUDErrorImage;
static SVProgressHUDMaskType SVProgressHUDDefaultMaskType;
+static UIView *SVProgressHUDExtensionView;
static const CGFloat SVProgressHUDRingRadius = 18;
static const CGFloat SVProgressHUDRingNoTextRadius = 24;
@@ -129,6 +130,11 @@ + (void)setDefaultMaskType:(SVProgressHUDMaskType)maskType{
SVProgressHUDDefaultMaskType = maskType;
}
++ (void)setViewForExtension:(UIView *)view{
+ [self sharedView];
+ SVProgressHUDExtensionView = view;
+}
+
#pragma mark - Show Methods
@@ -255,15 +261,25 @@ - (id)initWithFrame:(CGRect)frame {
SVProgressHUDBackgroundColor = [UIColor colorWithWhite:0.0f alpha:0.8f];
SVProgressHUDForegroundColor = [UIColor whiteColor];
}
+
+ NSBundle *bundle = [NSBundle bundleForClass:self.class];
+ NSURL *url = [bundle URLForResource:@"SVProgressHUD" withExtension:@"bundle"];
+ NSBundle *imageBundle = [NSBundle bundleWithURL:url];
+
+ UIImage* infoImage = [UIImage imageWithContentsOfFile:[imageBundle pathForResource:@"info" ofType:@"png"]];
+ UIImage* successImage = [UIImage imageWithContentsOfFile:[imageBundle pathForResource:@"success" ofType:@"png"]];
+ UIImage* errorImage = [UIImage imageWithContentsOfFile:[imageBundle pathForResource:@"error" ofType:@"png"]];
+
if ([[UIImage class] instancesRespondToSelector:@selector(imageWithRenderingMode:)]) {
- SVProgressHUDInfoImage = [[UIImage imageNamed:@"SVProgressHUD.bundle/info"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
- SVProgressHUDSuccessImage = [[UIImage imageNamed:@"SVProgressHUD.bundle/success"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
- SVProgressHUDErrorImage = [[UIImage imageNamed:@"SVProgressHUD.bundle/error"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
+ SVProgressHUDInfoImage = [infoImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
+ SVProgressHUDSuccessImage = [successImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
+ SVProgressHUDErrorImage = [errorImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
} else {
- SVProgressHUDInfoImage = [UIImage imageNamed:@"SVProgressHUD.bundle/info"];
- SVProgressHUDSuccessImage = [UIImage imageNamed:@"SVProgressHUD.bundle/success"];
- SVProgressHUDErrorImage = [UIImage imageNamed:@"SVProgressHUD.bundle/error"];
+ SVProgressHUDInfoImage = infoImage;
+ SVProgressHUDSuccessImage = successImage;
+ SVProgressHUDErrorImage = errorImage;
}
+
SVProgressHUDRingThickness = 2;
SVProgressHUDDefaultMaskType = SVProgressHUDMaskTypeNone;
}
@@ -456,7 +472,11 @@ - (void)positionHUD:(NSNotification*)notification {
self.frame = UIScreen.mainScreen.bounds;
+#if !defined(SV_APP_EXTENSIONS)
UIInterfaceOrientation orientation = UIApplication.sharedApplication.statusBarOrientation;
+#else
+ UIInterfaceOrientation orientation = CGRectGetWidth(self.frame) > CGRectGetHeight(self.frame) ? UIInterfaceOrientationLandscapeLeft : UIInterfaceOrientationPortrait;
+#endif
// no transforms applied to window in iOS 8, but only if compiled with iOS 8 sdk as base sdk, otherwise system supports old rotation logic.
BOOL ignoreOrientation = NO;
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
@@ -481,7 +501,11 @@ - (void)positionHUD:(NSNotification*)notification {
}
CGRect orientationFrame = self.bounds;
+#if !defined(SV_APP_EXTENSIONS)
CGRect statusBarFrame = UIApplication.sharedApplication.statusBarFrame;
+#else
+ CGRect statusBarFrame = CGRectZero;
+#endif
if(!ignoreOrientation && UIInterfaceOrientationIsLandscape(orientation)) {
float temp = CGRectGetWidth(orientationFrame);
@@ -565,14 +589,23 @@ - (void)overlayViewDidReceiveTouchEvent:(id)sender forEvent:(UIEvent *)event {
- (void)showProgress:(float)progress status:(NSString*)string maskType:(SVProgressHUDMaskType)hudMaskType {
if(!self.overlayView.superview){
+#if !defined(SV_APP_EXTENSIONS)
NSEnumerator *frontToBackWindows = [UIApplication.sharedApplication.windows reverseObjectEnumerator];
- UIScreen *mainScreen = UIScreen.mainScreen;
-
- for (UIWindow *window in frontToBackWindows)
- if (window.screen == mainScreen && window.windowLevel == UIWindowLevelNormal) {
+ for (UIWindow *window in frontToBackWindows){
+ BOOL windowOnMainScreen = window.screen == UIScreen.mainScreen;
+ BOOL windowIsVisible = !window.hidden && window.alpha > 0;
+ BOOL windowLevelNormal = window.windowLevel == UIWindowLevelNormal;
+
+ if (windowOnMainScreen && windowIsVisible && windowLevelNormal) {
[window addSubview:self.overlayView];
break;
}
+ }
+#else
+ if(SVProgressHUDExtensionView){
+ [SVProgressHUDExtensionView addSubview:self.overlayView];
+ }
+#endif
} else {
// Ensure that overlay will be exactly on top of rootViewController (which may be changed during runtime).
[self.overlayView.superview bringSubviewToFront:self.overlayView];
@@ -671,10 +704,11 @@ - (UIImage *)image:(UIImage *)image withTintColor:(UIColor *)color{
- (void)showImage:(UIImage *)image status:(NSString *)string duration:(NSTimeInterval)duration maskType:(SVProgressHUDMaskType)hudMaskType {
self.progress = SVProgressHUDUndefinedProgress;
+ self.maskType = hudMaskType;
[self cancelRingLayerAnimation];
if(![self.class isVisible])
- [self.class show];
+ [self.class showWithMaskType:self.maskType];
if ([self.imageView respondsToSelector:@selector(setTintColor:)]) {
self.imageView.tintColor = SVProgressHUDForegroundColor;
@@ -683,16 +717,17 @@ - (void)showImage:(UIImage *)image status:(NSString *)string duration:(NSTimeInt
}
self.imageView.image = image;
self.imageView.hidden = NO;
- self.maskType = hudMaskType;
-
+
self.stringLabel.text = string;
[self updatePosition];
[self.indefiniteAnimatedView removeFromSuperview];
if(self.maskType != SVProgressHUDMaskTypeNone) {
+ self.overlayView.userInteractionEnabled = YES;
self.accessibilityLabel = string;
self.isAccessibilityElement = YES;
} else {
+ self.overlayView.userInteractionEnabled = NO;
self.hudView.accessibilityLabel = string;
self.hudView.isAccessibilityElement = YES;
}
@@ -744,10 +779,12 @@ - (void)dismiss {
userInfo:userInfo];
// Tell the rootViewController to update the StatusBar appearance
+#if !defined(SV_APP_EXTENSIONS)
UIViewController *rootController = [[UIApplication sharedApplication] keyWindow].rootViewController;
if ([rootController respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {
[rootController setNeedsStatusBarAppearanceUpdate];
}
+#endif
// uncomment to make sure UIWindow is gone from app.windows
//NSLog(@"%@", [UIApplication sharedApplication].windows);
//NSLog(@"keyWindow = %@", [UIApplication sharedApplication].keyWindow);
@@ -919,6 +956,7 @@ - (UIImageView *)imageView {
- (CGFloat)visibleKeyboardHeight {
+#if !defined(SV_APP_EXTENSIONS)
UIWindow *keyboardWindow = nil;
for (UIWindow *testWindow in [[UIApplication sharedApplication] windows]) {
if(![[testWindow class] isEqual:[UIWindow class]]) {
@@ -938,7 +976,7 @@ - (CGFloat)visibleKeyboardHeight {
}
}
}
-
+#endif
return 0;
}
diff --git a/iOSStudy/Pods/SVWebViewController/SVWebViewController/SVWebViewController.h b/iOSStudy/Pods/SVWebViewController/SVWebViewController/SVWebViewController.h
index fc904ae..42e9dfe 100644
--- a/iOSStudy/Pods/SVWebViewController/SVWebViewController/SVWebViewController.h
+++ b/iOSStudy/Pods/SVWebViewController/SVWebViewController/SVWebViewController.h
@@ -9,7 +9,7 @@
#import "SVModalWebViewController.h"
@interface SVWebViewController : UIViewController
-@property(nonatomic,copy)NSString*urlString;
+
- (id)initWithAddress:(NSString*)urlString;
- (id)initWithURL:(NSURL*)URL;
diff --git a/iOSStudy/Pods/SVWebViewController/SVWebViewController/SVWebViewController.m b/iOSStudy/Pods/SVWebViewController/SVWebViewController/SVWebViewController.m
index 80d97d6..ce577d3 100644
--- a/iOSStudy/Pods/SVWebViewController/SVWebViewController/SVWebViewController.m
+++ b/iOSStudy/Pods/SVWebViewController/SVWebViewController/SVWebViewController.m
@@ -9,7 +9,7 @@
#import "SVWebViewControllerActivityChrome.h"
#import "SVWebViewControllerActivitySafari.h"
#import "SVWebViewController.h"
-#import
+#import "SVProgressHUD.h"
@interface SVWebViewController ()
@property (nonatomic, strong) UIBarButtonItem *backBarButtonItem;
@@ -47,22 +47,11 @@ - (void)dealloc {
}
- (id)initWithAddress:(NSString *)urlString {
-
- if (urlString) {
- urlString = _urlString;
- }
return [self initWithURL:[NSURL URLWithString:urlString]];
}
--(void)setUrlString:(NSString *)urlString{
- if (urlString) {
- _urlString = urlString;
- }
-}
-
- (id)initWithURL:(NSURL*)pageURL {
-
if(self = [super init]) {
self.URL = pageURL;
}
@@ -112,6 +101,7 @@ - (void)viewWillDisappear:(BOOL)animated {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
[self.navigationController setToolbarHidden:YES animated:animated];
}
+ [SVProgressHUD dismiss];
}
- (void)viewDidDisappear:(BOOL)animated {
@@ -236,31 +226,24 @@ - (void)updateToolbarItems {
#pragma mark - UIWebViewDelegate
- (void)webViewDidStartLoad:(UIWebView *)webView {
-
- [SVProgressHUD show];
-
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
[self updateToolbarItems];
+ [SVProgressHUD show];
+
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
-
- [SVProgressHUD dismiss];
-
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
self.navigationItem.title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];
[self updateToolbarItems];
-
-
+ [SVProgressHUD dismiss];
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
[self updateToolbarItems];
-
- [SVProgressHUD dismiss];
}
#pragma mark - Target actions
@@ -290,7 +273,6 @@ - (void)actionButtonClicked:(id)sender {
}
- (void)doneButtonClicked:(id)sender {
- [SVProgressHUD dismiss];
[self dismissViewControllerAnimated:YES completion:NULL];
}
diff --git a/iOSStudy/Pods/Shimmer/FBShimmering/FBShimmering.h b/iOSStudy/Pods/Shimmer/FBShimmering/FBShimmering.h
new file mode 100644
index 0000000..c57b4ae
--- /dev/null
+++ b/iOSStudy/Pods/Shimmer/FBShimmering/FBShimmering.h
@@ -0,0 +1,58 @@
+/**
+ Copyright (c) 2014-present, Facebook, Inc.
+ All rights reserved.
+
+ This source code is licensed under the BSD-style license found in the
+ LICENSE file in the root directory of this source tree. An additional grant
+ of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+#import
+
+typedef NS_ENUM(NSInteger, FBShimmerDirection) {
+ FBShimmerDirectionRight, // Shimmer animation goes from left to right
+ FBShimmerDirectionLeft, // Shimmer animation goes from right to left
+ FBShimmerDirectionUp, // Shimmer animation goes from below to above
+ FBShimmerDirectionDown, // Shimmer animation goes from above to below
+};
+
+@protocol FBShimmering
+
+//! @abstract Set this to YES to start shimming and NO to stop. Defaults to NO.
+@property (nonatomic, assign, readwrite, getter = isShimmering) BOOL shimmering;
+
+//! @abstract The time interval between shimmerings in seconds. Defaults to 0.4.
+@property (assign, nonatomic, readwrite) CFTimeInterval shimmeringPauseDuration;
+
+//! @abstract The opacity of the content while it is shimmering. Defaults to 1.0.
+@property (assign, nonatomic, readwrite) CGFloat shimmeringAnimationOpacity;
+
+//! @abstract The opacity of the content before it is shimmering. Defaults to 0.5.
+@property (assign, nonatomic, readwrite) CGFloat shimmeringOpacity;
+
+//! @abstract The speed of shimmering, in points per second. Defaults to 230.
+@property (assign, nonatomic, readwrite) CGFloat shimmeringSpeed;
+
+//! @abstract The highlight length of shimmering. Range of [0,1], defaults to 0.33.
+@property (assign, nonatomic, readwrite) CGFloat shimmeringHighlightLength;
+
+//! @abstract @deprecated Same as "shimmeringHighlightLength", just for downward compatibility
+@property (assign, nonatomic, readwrite, getter = shimmeringHighlightLength, setter = setShimmeringHighlightLength:) CGFloat shimmeringHighlightWidth;
+
+//! @abstract The direction of shimmering animation. Defaults to FBShimmerDirectionRight.
+@property (assign, nonatomic, readwrite) FBShimmerDirection shimmeringDirection;
+
+//! @abstract The duration of the fade used when shimmer begins. Defaults to 0.1.
+@property (assign, nonatomic, readwrite) CFTimeInterval shimmeringBeginFadeDuration;
+
+//! @abstract The duration of the fade used when shimmer ends. Defaults to 0.3.
+@property (assign, nonatomic, readwrite) CFTimeInterval shimmeringEndFadeDuration;
+
+/**
+ @abstract The absolute CoreAnimation media time when the shimmer will fade in.
+ @discussion Only valid after setting {@ref shimmering} to NO.
+ */
+@property (assign, nonatomic, readonly) CFTimeInterval shimmeringFadeTime;
+
+@end
+
diff --git a/iOSStudy/Pods/Shimmer/FBShimmering/FBShimmeringLayer.h b/iOSStudy/Pods/Shimmer/FBShimmering/FBShimmeringLayer.h
new file mode 100644
index 0000000..8e74179
--- /dev/null
+++ b/iOSStudy/Pods/Shimmer/FBShimmering/FBShimmeringLayer.h
@@ -0,0 +1,22 @@
+/**
+ Copyright (c) 2014-present, Facebook, Inc.
+ All rights reserved.
+
+ This source code is licensed under the BSD-style license found in the
+ LICENSE file in the root directory of this source tree. An additional grant
+ of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+#import
+
+#import "FBShimmering.h"
+
+/**
+ @abstract Lightweight, generic shimmering layer.
+ */
+@interface FBShimmeringLayer : CALayer
+
+//! @abstract The content layer to be shimmered.
+@property (strong, nonatomic) CALayer *contentLayer;
+
+@end
diff --git a/iOSStudy/Pods/Shimmer/FBShimmering/FBShimmeringLayer.m b/iOSStudy/Pods/Shimmer/FBShimmering/FBShimmeringLayer.m
new file mode 100644
index 0000000..3d615e6
--- /dev/null
+++ b/iOSStudy/Pods/Shimmer/FBShimmering/FBShimmeringLayer.m
@@ -0,0 +1,468 @@
+/**
+ Copyright (c) 2014-present, Facebook, Inc.
+ All rights reserved.
+
+ This source code is licensed under the BSD-style license found in the
+ LICENSE file in the root directory of this source tree. An additional grant
+ of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+#import "FBShimmeringLayer.h"
+
+#import
+#import
+#import
+
+#import
+#import
+
+#if !__has_feature(objc_arc)
+#error This file must be compiled with ARC. Convert your project to ARC or specify the -fobjc-arc flag.
+#endif
+
+#if TARGET_IPHONE_SIMULATOR
+UIKIT_EXTERN float UIAnimationDragCoefficient(void); // UIKit private drag coeffient, use judiciously
+#endif
+
+static CGFloat FBShimmeringLayerDragCoefficient(void)
+{
+#if TARGET_IPHONE_SIMULATOR
+ return UIAnimationDragCoefficient();
+#else
+ return 1.0;
+#endif
+}
+
+static void FBShimmeringLayerAnimationApplyDragCoefficient(CAAnimation *animation)
+{
+ CGFloat k = FBShimmeringLayerDragCoefficient();
+
+ if (k != 0 && k != 1) {
+ animation.speed = 1 / k;
+ }
+}
+
+// animations keys
+static NSString *const kFBShimmerSlideAnimationKey = @"slide";
+static NSString *const kFBFadeAnimationKey = @"fade";
+static NSString *const kFBEndFadeAnimationKey = @"fade-end";
+
+static CABasicAnimation *fade_animation(id delegate, CALayer *layer, CGFloat opacity, CFTimeInterval duration)
+{
+ CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
+ animation.delegate = delegate;
+ animation.fromValue = @([(layer.presentationLayer ?: layer) opacity]);
+ animation.toValue = @(opacity);
+ animation.fillMode = kCAFillModeBoth;
+ animation.removedOnCompletion = NO;
+ animation.duration = duration;
+ FBShimmeringLayerAnimationApplyDragCoefficient(animation);
+ return animation;
+}
+
+static CABasicAnimation *shimmer_begin_fade_animation(id delegate, CALayer *layer, CGFloat opacity, CGFloat duration)
+{
+ return fade_animation(delegate, layer, opacity, duration);
+}
+
+static CABasicAnimation *shimmer_end_fade_animation(id delegate, CALayer *layer, CGFloat opacity, CGFloat duration)
+{
+ CABasicAnimation *animation = fade_animation(delegate, layer, opacity, duration);
+ [animation setValue:@YES forKey:kFBEndFadeAnimationKey];
+ return animation;
+}
+
+static CABasicAnimation *shimmer_slide_animation(id delegate, CFTimeInterval duration, FBShimmerDirection direction)
+{
+ CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
+ animation.delegate = delegate;
+ animation.toValue = [NSValue valueWithCGPoint:CGPointZero];
+ animation.duration = duration;
+ animation.repeatCount = HUGE_VALF;
+ FBShimmeringLayerAnimationApplyDragCoefficient(animation);
+ if (direction == FBShimmerDirectionLeft ||
+ direction == FBShimmerDirectionUp) {
+ animation.speed = -fabsf(animation.speed);
+ }
+ return animation;
+}
+
+// take a shimmer slide animation and turns into repeating
+static CAAnimation *shimmer_slide_repeat(CAAnimation *a, CFTimeInterval duration, FBShimmerDirection direction)
+{
+ CAAnimation *anim = [a copy];
+ anim.repeatCount = HUGE_VALF;
+ anim.duration = duration;
+ anim.speed = (direction == FBShimmerDirectionRight || direction == FBShimmerDirectionDown) ? fabsf(anim.speed) : -fabsf(anim.speed);
+ return anim;
+}
+
+// take a shimmer slide animation and turns into finish
+static CAAnimation *shimmer_slide_finish(CAAnimation *a)
+{
+ CAAnimation *anim = [a copy];
+ anim.repeatCount = 0;
+ return anim;
+}
+
+@interface FBShimmeringMaskLayer : CAGradientLayer
+@property (readonly, nonatomic) CALayer *fadeLayer;
+@end
+
+@implementation FBShimmeringMaskLayer
+
+- (instancetype)init
+{
+ self = [super init];
+ if (nil != self) {
+ _fadeLayer = [[CALayer alloc] init];
+ _fadeLayer.backgroundColor = [UIColor whiteColor].CGColor;
+ [self addSublayer:_fadeLayer];
+ }
+ return self;
+}
+
+- (void)layoutSublayers
+{
+ [super layoutSublayers];
+ CGRect r = self.bounds;
+ _fadeLayer.bounds = r;
+ _fadeLayer.position = CGPointMake(CGRectGetMidX(r), CGRectGetMidY(r));
+}
+
+@end
+
+@interface FBShimmeringLayer ()
+@property (strong, nonatomic) FBShimmeringMaskLayer *maskLayer;
+@end
+
+@implementation FBShimmeringLayer
+{
+ CALayer *_contentLayer;
+ FBShimmeringMaskLayer *_maskLayer;
+}
+
+#pragma mark - Lifecycle
+
+@synthesize shimmering = _shimmering;
+@synthesize shimmeringPauseDuration = _shimmeringPauseDuration;
+@synthesize shimmeringAnimationOpacity = _shimmeringAnimationOpacity;
+@synthesize shimmeringOpacity = _shimmeringOpacity;
+@synthesize shimmeringSpeed = _shimmeringSpeed;
+@synthesize shimmeringHighlightLength = _shimmeringHighlightLength;
+@synthesize shimmeringDirection = _shimmeringDirection;
+@synthesize shimmeringFadeTime = _shimmeringFadeTime;
+@synthesize shimmeringBeginFadeDuration = _shimmeringBeginFadeDuration;
+@synthesize shimmeringEndFadeDuration = _shimmeringEndFadeDuration;
+@dynamic shimmeringHighlightWidth;
+
+- (instancetype)init
+{
+ self = [super init];
+ if (nil != self) {
+ // default configuration
+ _shimmeringPauseDuration = 0.4;
+ _shimmeringSpeed = 230.0;
+ _shimmeringHighlightLength = 1.0;
+ _shimmeringAnimationOpacity = 0.5;
+ _shimmeringOpacity = 1.0;
+ _shimmeringDirection = FBShimmerDirectionRight;
+ _shimmeringBeginFadeDuration = 0.1;
+ _shimmeringEndFadeDuration = 0.3;
+ }
+ return self;
+}
+
+#pragma mark - Properties
+
+- (void)setContentLayer:(CALayer *)contentLayer
+{
+ // reset mask
+ self.maskLayer = nil;
+
+ // note content layer and add for display
+ _contentLayer = contentLayer;
+ self.sublayers = contentLayer ? @[contentLayer] : nil;
+
+ // update shimmering animation
+ [self _updateShimmering];
+}
+
+- (void)setShimmering:(BOOL)shimmering
+{
+ if (shimmering != _shimmering) {
+ _shimmering = shimmering;
+ [self _updateShimmering];
+ }
+}
+
+- (void)setShimmeringSpeed:(CGFloat)speed
+{
+ if (speed != _shimmeringSpeed) {
+ _shimmeringSpeed = speed;
+ [self _updateShimmering];
+ }
+}
+
+- (void)setShimmeringHighlightLength:(CGFloat)length
+{
+ if (length != _shimmeringHighlightLength) {
+ _shimmeringHighlightLength = length;
+ [self _updateShimmering];
+ }
+}
+
+- (void)setShimmeringDirection:(FBShimmerDirection)direction
+{
+ if (direction != _shimmeringDirection) {
+ _shimmeringDirection = direction;
+ [self _updateShimmering];
+ }
+}
+
+- (void)setShimmeringPauseDuration:(CFTimeInterval)duration
+{
+ if (duration != _shimmeringPauseDuration) {
+ _shimmeringPauseDuration = duration;
+ [self _updateShimmering];
+ }
+}
+
+- (void)setShimmeringAnimationOpacity:(CGFloat)shimmeringAnimationOpacity
+{
+ if (shimmeringAnimationOpacity != _shimmeringAnimationOpacity) {
+ _shimmeringAnimationOpacity = shimmeringAnimationOpacity;
+ [self _updateMaskColors];
+ }
+}
+
+- (void)setShimmeringOpacity:(CGFloat)shimmeringOpacity
+{
+ if (shimmeringOpacity != _shimmeringOpacity) {
+ _shimmeringOpacity = shimmeringOpacity;
+ [self _updateMaskColors];
+ }
+}
+
+- (void)layoutSublayers
+{
+ [super layoutSublayers];
+ CGRect r = self.bounds;
+ _contentLayer.anchorPoint = CGPointMake(0.5, 0.5);
+ _contentLayer.bounds = r;
+ _contentLayer.position = CGPointMake(CGRectGetMidX(r), CGRectGetMidY(r));
+
+ if (nil != _maskLayer) {
+ [self _updateMaskLayout];
+ }
+}
+
+- (void)setBounds:(CGRect)bounds
+{
+ if (!CGRectEqualToRect(self.bounds, bounds)) {
+ [super setBounds:bounds];
+
+ [self _updateShimmering];
+ }
+}
+
+#pragma mark - Internal
+
+- (void)_clearMask
+{
+ if (nil == _maskLayer) {
+ return;
+ }
+
+ BOOL disableActions = [CATransaction disableActions];
+ [CATransaction setDisableActions:YES];
+
+ self.maskLayer = nil;
+ _contentLayer.mask = nil;
+
+ [CATransaction setDisableActions:disableActions];
+}
+
+- (void)_createMaskIfNeeded
+{
+ if (_shimmering && !_maskLayer) {
+ _maskLayer = [FBShimmeringMaskLayer layer];
+ _maskLayer.delegate = self;
+ _contentLayer.mask = _maskLayer;
+ [self _updateMaskColors];
+ [self _updateMaskLayout];
+ }
+}
+
+- (void)_updateMaskColors
+{
+ if (nil == _maskLayer) {
+ return;
+ }
+
+ // We create a gradient to be used as a mask.
+ // In a mask, the colors do not matter, it's the alpha that decides the degree of masking.
+ UIColor *maskedColor = [UIColor colorWithWhite:1.0 alpha:_shimmeringOpacity];
+ UIColor *unmaskedColor = [UIColor colorWithWhite:1.0 alpha:_shimmeringAnimationOpacity];
+
+ // Create a gradient from masked to unmasked to masked.
+ _maskLayer.colors = @[(__bridge id)maskedColor.CGColor, (__bridge id)unmaskedColor.CGColor, (__bridge id)maskedColor.CGColor];
+}
+
+- (void)_updateMaskLayout
+{
+ // Everything outside the mask layer is hidden, so we need to create a mask long enough for the shimmered layer to be always covered by the mask.
+ CGFloat length = 0.0f;
+ if (_shimmeringDirection == FBShimmerDirectionDown ||
+ _shimmeringDirection == FBShimmerDirectionUp) {
+ length = CGRectGetHeight(_contentLayer.bounds);
+ } else {
+ length = CGRectGetWidth(_contentLayer.bounds);
+ }
+ if (0 == length) {
+ return;
+ }
+
+ // extra distance for the gradient to travel during the pause.
+ CGFloat extraDistance = length + _shimmeringSpeed * _shimmeringPauseDuration;
+
+ // compute how far the shimmering goes
+ CGFloat fullShimmerLength = length * 3.0f + extraDistance;
+ CGFloat travelDistance = length * 2.0f + extraDistance;
+
+ // position the gradient for the desired width
+ CGFloat highlightOutsideLength = (1.0 - _shimmeringHighlightLength) / 2.0;
+ _maskLayer.locations = @[@(highlightOutsideLength),
+ @(0.5),
+ @(1.0 - highlightOutsideLength)];
+
+ CGFloat startPoint = (length + extraDistance) / fullShimmerLength;
+ CGFloat endPoint = travelDistance / fullShimmerLength;
+
+ // position for the start of the animation
+ _maskLayer.anchorPoint = CGPointZero;
+ if (_shimmeringDirection == FBShimmerDirectionDown ||
+ _shimmeringDirection == FBShimmerDirectionUp) {
+ _maskLayer.startPoint = CGPointMake(0.0, startPoint);
+ _maskLayer.endPoint = CGPointMake(0.0, endPoint);
+ _maskLayer.position = CGPointMake(0.0, -travelDistance);
+ _maskLayer.bounds = CGRectMake(0.0, 0.0, CGRectGetWidth(_contentLayer.bounds), fullShimmerLength);
+ } else {
+ _maskLayer.startPoint = CGPointMake(startPoint, 0.0);
+ _maskLayer.endPoint = CGPointMake(endPoint, 0.0);
+ _maskLayer.position = CGPointMake(-travelDistance, 0.0);
+ _maskLayer.bounds = CGRectMake(0.0, 0.0, fullShimmerLength, CGRectGetHeight(_contentLayer.bounds));
+ }
+}
+
+- (void)_updateShimmering
+{
+ // create mask if needed
+ [self _createMaskIfNeeded];
+
+ // if not shimmering and no mask, noop
+ if (!_shimmering && !_maskLayer) {
+ return;
+ }
+
+ // ensure layed out
+ [self layoutIfNeeded];
+
+ BOOL disableActions = [CATransaction disableActions];
+ if (!_shimmering) {
+ if (disableActions) {
+ // simply remove mask
+ [self _clearMask];
+ } else {
+ // end slide
+ CFTimeInterval slideEndTime = 0;
+
+ CAAnimation *slideAnimation = [_maskLayer animationForKey:kFBShimmerSlideAnimationKey];
+ if (slideAnimation != nil) {
+ // determing total time sliding
+ CFTimeInterval now = CACurrentMediaTime();
+ CFTimeInterval slideTotalDuration = now - slideAnimation.beginTime;
+
+ // determine time offset into current slide
+ CFTimeInterval slideTimeOffset = fmod(slideTotalDuration, slideAnimation.duration);
+
+ // transition to non-repeating slide
+ CAAnimation *finishAnimation = shimmer_slide_finish(slideAnimation);
+
+ // adjust begin time to now - offset
+ finishAnimation.beginTime = now - slideTimeOffset;
+
+ // note slide end time and begin
+ slideEndTime = finishAnimation.beginTime + slideAnimation.duration;
+ [_maskLayer addAnimation:finishAnimation forKey:kFBShimmerSlideAnimationKey];
+ }
+
+ // fade in text at slideEndTime
+ CABasicAnimation *fadeInAnimation = shimmer_end_fade_animation(self, _maskLayer.fadeLayer, 1.0, _shimmeringEndFadeDuration);
+ fadeInAnimation.beginTime = slideEndTime;
+ [_maskLayer.fadeLayer addAnimation:fadeInAnimation forKey:kFBFadeAnimationKey];
+
+ // expose end time for synchronization
+ _shimmeringFadeTime = slideEndTime;
+ }
+ } else {
+ // fade out text, optionally animated
+ CABasicAnimation *fadeOutAnimation = nil;
+ if (_shimmeringBeginFadeDuration > 0.0 && !disableActions) {
+ fadeOutAnimation = shimmer_begin_fade_animation(self, _maskLayer.fadeLayer, 0.0, _shimmeringBeginFadeDuration);
+ [_maskLayer.fadeLayer addAnimation:fadeOutAnimation forKey:kFBFadeAnimationKey];
+ } else {
+ BOOL innerDisableActions = [CATransaction disableActions];
+ [CATransaction setDisableActions:YES];
+
+ _maskLayer.fadeLayer.opacity = 0.0;
+ [_maskLayer.fadeLayer removeAllAnimations];
+
+ [CATransaction setDisableActions:innerDisableActions];
+ }
+
+ // begin slide animation
+ CAAnimation *slideAnimation = [_maskLayer animationForKey:kFBShimmerSlideAnimationKey];
+
+ // compute shimmer duration
+ CGFloat length = 0.0f;
+ if (_shimmeringDirection == FBShimmerDirectionDown ||
+ _shimmeringDirection == FBShimmerDirectionUp) {
+ length = CGRectGetHeight(_contentLayer.bounds);
+ } else {
+ length = CGRectGetWidth(_contentLayer.bounds);
+ }
+ CFTimeInterval animationDuration = (length / _shimmeringSpeed) + _shimmeringPauseDuration;
+
+ if (slideAnimation != nil) {
+ // ensure existing slide animation repeats
+ [_maskLayer addAnimation:shimmer_slide_repeat(slideAnimation, animationDuration, _shimmeringDirection) forKey:kFBShimmerSlideAnimationKey];
+ } else {
+ // add slide animation
+ slideAnimation = shimmer_slide_animation(self, animationDuration, _shimmeringDirection);
+ slideAnimation.fillMode = kCAFillModeForwards;
+ slideAnimation.removedOnCompletion = NO;
+ slideAnimation.beginTime = CACurrentMediaTime() + fadeOutAnimation.duration;
+ [_maskLayer addAnimation:slideAnimation forKey:kFBShimmerSlideAnimationKey];
+ }
+ }
+}
+
+#pragma mark - CALayerDelegate
+
+- (id)actionForLayer:(CALayer *)layer forKey:(NSString *)event
+{
+ // no associated actions
+ return (id)kCFNull;
+}
+
+#pragma mark - CAAnimationDelegate
+
+- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
+{
+ if (flag && [[anim valueForKey:kFBEndFadeAnimationKey] boolValue]) {
+ [self _clearMask];
+ }
+}
+
+@end
diff --git a/iOSStudy/Pods/Shimmer/FBShimmering/FBShimmeringView.h b/iOSStudy/Pods/Shimmer/FBShimmering/FBShimmeringView.h
new file mode 100644
index 0000000..5431668
--- /dev/null
+++ b/iOSStudy/Pods/Shimmer/FBShimmering/FBShimmeringView.h
@@ -0,0 +1,22 @@
+/**
+ Copyright (c) 2014-present, Facebook, Inc.
+ All rights reserved.
+
+ This source code is licensed under the BSD-style license found in the
+ LICENSE file in the root directory of this source tree. An additional grant
+ of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+#import
+
+#import "FBShimmering.h"
+
+/**
+ @abstract Lightweight, generic shimmering view.
+ */
+@interface FBShimmeringView : UIView
+
+//! @abstract The content view to be shimmered.
+@property (strong, nonatomic) UIView *contentView;
+
+@end
diff --git a/iOSStudy/Pods/Shimmer/FBShimmering/FBShimmeringView.m b/iOSStudy/Pods/Shimmer/FBShimmering/FBShimmeringView.m
new file mode 100644
index 0000000..7bb9e04
--- /dev/null
+++ b/iOSStudy/Pods/Shimmer/FBShimmering/FBShimmeringView.m
@@ -0,0 +1,61 @@
+/**
+ Copyright (c) 2014-present, Facebook, Inc.
+ All rights reserved.
+
+ This source code is licensed under the BSD-style license found in the
+ LICENSE file in the root directory of this source tree. An additional grant
+ of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+#import "FBShimmeringView.h"
+
+#import "FBShimmeringLayer.h"
+
+#if !__has_feature(objc_arc)
+#error This file must be compiled with ARC. Convert your project to ARC or specify the -fobjc-arc flag.
+#endif
+
+@implementation FBShimmeringView
+
++ (Class)layerClass
+{
+ return [FBShimmeringLayer class];
+}
+
+#define __layer ((FBShimmeringLayer *)self.layer)
+
+#define LAYER_ACCESSOR(accessor, ctype) \
+- (ctype)accessor { \
+ return [__layer accessor]; \
+}
+
+#define LAYER_MUTATOR(mutator, ctype) \
+- (void)mutator (ctype)value { \
+ [__layer mutator value]; \
+}
+
+#define LAYER_RW_PROPERTY(accessor, mutator, ctype) \
+ LAYER_ACCESSOR (accessor, ctype) \
+ LAYER_MUTATOR (mutator, ctype)
+
+LAYER_RW_PROPERTY(isShimmering, setShimmering:, BOOL)
+LAYER_RW_PROPERTY(shimmeringPauseDuration, setShimmeringPauseDuration:, CFTimeInterval)
+LAYER_RW_PROPERTY(shimmeringAnimationOpacity, setShimmeringAnimationOpacity:, CGFloat)
+LAYER_RW_PROPERTY(shimmeringOpacity, setShimmeringOpacity:, CGFloat)
+LAYER_RW_PROPERTY(shimmeringSpeed, setShimmeringSpeed:, CGFloat)
+LAYER_RW_PROPERTY(shimmeringHighlightLength, setShimmeringHighlightLength:, CGFloat)
+LAYER_RW_PROPERTY(shimmeringDirection, setShimmeringDirection:, FBShimmerDirection)
+LAYER_ACCESSOR(shimmeringFadeTime, CFTimeInterval)
+LAYER_RW_PROPERTY(shimmeringBeginFadeDuration, setShimmeringBeginFadeDuration:, CFTimeInterval)
+LAYER_RW_PROPERTY(shimmeringEndFadeDuration, setShimmeringEndFadeDuration:, CFTimeInterval)
+
+- (void)setContentView:(UIView *)contentView
+{
+ if (contentView != _contentView) {
+ _contentView = contentView;
+ [self addSubview:contentView];
+ __layer.contentLayer = contentView.layer;
+ }
+}
+
+@end
diff --git a/iOSStudy/Pods/Shimmer/LICENSE b/iOSStudy/Pods/Shimmer/LICENSE
new file mode 100644
index 0000000..fb34f0c
--- /dev/null
+++ b/iOSStudy/Pods/Shimmer/LICENSE
@@ -0,0 +1,30 @@
+BSD License
+
+For Shimmer software
+
+Copyright (c) 2014, Facebook, Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ * Neither the name Facebook nor the names of its contributors may be used to
+ endorse or promote products derived from this software without specific
+ prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/iOSStudy/Pods/Shimmer/README.md b/iOSStudy/Pods/Shimmer/README.md
new file mode 100644
index 0000000..42fde97
--- /dev/null
+++ b/iOSStudy/Pods/Shimmer/README.md
@@ -0,0 +1,44 @@
+# Shimmer
+Shimmer is an easy way to add a shimmering effect to any view in your app. It's useful as an unobtrusive loading indicator.
+
+Shimmer was originally developed to show loading status in [Paper](http://facebook.com/paper).
+
+
+
+## Usage
+To use Shimmer, create a `FBShimmeringView` or `FBShimmeringLayer` and add your content. To start shimmering, set the `shimmering` property to `YES`.
+
+An example of making a label shimmer:
+
+```objective-c
+FBShimmeringView *shimmeringView = [[FBShimmeringView alloc] initWithFrame:self.view.bounds];
+[self.view addSubview:shimmeringView];
+
+UILabel *loadingLabel = [[UILabel alloc] initWithFrame:shimmeringView.bounds];
+loadingLabel.textAlignment = NSTextAlignmentCenter;
+loadingLabel.text = NSLocalizedString(@"Shimmer", nil);
+shimmeringView.contentView = loadingLabel;
+
+// Start shimmering.
+shimmeringView.shimmering = YES;
+```
+
+There's also an example project. In the example, you can swipe horizontally and vertically to try various shimmering parameters, or tap to start or stop shimmering. (To build the example locally, you'll need to open `FBShimmering.xcworkpace` rather than the `.xcodeproj`.)
+
+## Installation
+There are two options:
+
+ 1. Shimmer is available as `Shimmer` in [Cocoapods](http://cocoapods.org).
+ 2. Manually add the files into your Xcode project. Slightly simpler, but updates are also manual.
+
+Shimmer requires iOS 6 or later.
+
+## How it works
+Shimmer uses the `-[CALayer mask]` property to enable shimmering, similar to what's described in John Harper's 2009 WWDC talk (unfortunately no longer online). Shimmer uses CoreAnimation's timing features to smoothly transition "on-beat" when starting and stopping the shimmer.
+
+## Contributing
+See the CONTRIBUTING file for how to help out.
+
+## License
+Shimmer is BSD-licensed. We also provide an additional patent grant.
+
diff --git a/iOSStudy/Pods/Target Support Files/Pods-AFNetworking/Pods-AFNetworking-Private.xcconfig b/iOSStudy/Pods/Target Support Files/Pods-AFNetworking/Pods-AFNetworking-Private.xcconfig
index 1b0bf9d..7fe4d45 100644
--- a/iOSStudy/Pods/Target Support Files/Pods-AFNetworking/Pods-AFNetworking-Private.xcconfig
+++ b/iOSStudy/Pods/Target Support Files/Pods-AFNetworking/Pods-AFNetworking-Private.xcconfig
@@ -1,5 +1,5 @@
#include "Pods-AFNetworking.xcconfig"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/AFNetworking" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Mantle" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/SVWebViewController" "${PODS_ROOT}/Headers/Public/SWTableViewCell"
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/AFNetworking" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Mantle" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/SVWebViewController" "${PODS_ROOT}/Headers/Public/SWTableViewCell" "${PODS_ROOT}/Headers/Public/Shimmer"
OTHER_LDFLAGS = ${PODS_AFNETWORKING_OTHER_LDFLAGS} -ObjC
PODS_ROOT = ${SRCROOT}
\ No newline at end of file
diff --git a/iOSStudy/Pods/Target Support Files/Pods-MJRefresh/Pods-MJRefresh-Private.xcconfig b/iOSStudy/Pods/Target Support Files/Pods-MJRefresh/Pods-MJRefresh-Private.xcconfig
index 82c7242..d871d3a 100644
--- a/iOSStudy/Pods/Target Support Files/Pods-MJRefresh/Pods-MJRefresh-Private.xcconfig
+++ b/iOSStudy/Pods/Target Support Files/Pods-MJRefresh/Pods-MJRefresh-Private.xcconfig
@@ -1,5 +1,5 @@
#include "Pods-MJRefresh.xcconfig"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/MJRefresh" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Mantle" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/SVWebViewController" "${PODS_ROOT}/Headers/Public/SWTableViewCell"
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/MJRefresh" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Mantle" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/SVWebViewController" "${PODS_ROOT}/Headers/Public/SWTableViewCell" "${PODS_ROOT}/Headers/Public/Shimmer"
OTHER_LDFLAGS = -ObjC
PODS_ROOT = ${SRCROOT}
\ No newline at end of file
diff --git a/iOSStudy/Pods/Target Support Files/Pods-Mantle/Pods-Mantle-Private.xcconfig b/iOSStudy/Pods/Target Support Files/Pods-Mantle/Pods-Mantle-Private.xcconfig
index 757ac0c..4ce8560 100644
--- a/iOSStudy/Pods/Target Support Files/Pods-Mantle/Pods-Mantle-Private.xcconfig
+++ b/iOSStudy/Pods/Target Support Files/Pods-Mantle/Pods-Mantle-Private.xcconfig
@@ -1,5 +1,5 @@
#include "Pods-Mantle.xcconfig"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/Mantle" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Mantle" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/SVWebViewController" "${PODS_ROOT}/Headers/Public/SWTableViewCell"
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/Mantle" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Mantle" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/SVWebViewController" "${PODS_ROOT}/Headers/Public/SWTableViewCell" "${PODS_ROOT}/Headers/Public/Shimmer"
OTHER_LDFLAGS = ${PODS_MANTLE_OTHER_LDFLAGS} -ObjC
PODS_ROOT = ${SRCROOT}
\ No newline at end of file
diff --git a/iOSStudy/Pods/Target Support Files/Pods-SDWebImage/Pods-SDWebImage-Private.xcconfig b/iOSStudy/Pods/Target Support Files/Pods-SDWebImage/Pods-SDWebImage-Private.xcconfig
index 5cff63d..9253287 100644
--- a/iOSStudy/Pods/Target Support Files/Pods-SDWebImage/Pods-SDWebImage-Private.xcconfig
+++ b/iOSStudy/Pods/Target Support Files/Pods-SDWebImage/Pods-SDWebImage-Private.xcconfig
@@ -1,5 +1,5 @@
#include "Pods-SDWebImage.xcconfig"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/SDWebImage" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Mantle" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/SVWebViewController" "${PODS_ROOT}/Headers/Public/SWTableViewCell"
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/SDWebImage" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Mantle" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/SVWebViewController" "${PODS_ROOT}/Headers/Public/SWTableViewCell" "${PODS_ROOT}/Headers/Public/Shimmer"
OTHER_LDFLAGS = ${PODS_SDWEBIMAGE_OTHER_LDFLAGS} -ObjC
PODS_ROOT = ${SRCROOT}
\ No newline at end of file
diff --git a/iOSStudy/Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-Private.xcconfig b/iOSStudy/Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-Private.xcconfig
index ad76ac9..a353705 100644
--- a/iOSStudy/Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-Private.xcconfig
+++ b/iOSStudy/Pods/Target Support Files/Pods-SVProgressHUD/Pods-SVProgressHUD-Private.xcconfig
@@ -1,5 +1,5 @@
#include "Pods-SVProgressHUD.xcconfig"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/SVProgressHUD" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Mantle" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/SVWebViewController" "${PODS_ROOT}/Headers/Public/SWTableViewCell"
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/SVProgressHUD" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Mantle" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/SVWebViewController" "${PODS_ROOT}/Headers/Public/SWTableViewCell" "${PODS_ROOT}/Headers/Public/Shimmer"
OTHER_LDFLAGS = ${PODS_SVPROGRESSHUD_OTHER_LDFLAGS} -ObjC
PODS_ROOT = ${SRCROOT}
\ No newline at end of file
diff --git a/iOSStudy/Pods/Target Support Files/Pods-SVWebViewController/Pods-SVWebViewController-Private.xcconfig b/iOSStudy/Pods/Target Support Files/Pods-SVWebViewController/Pods-SVWebViewController-Private.xcconfig
index efe0096..2bf9c60 100644
--- a/iOSStudy/Pods/Target Support Files/Pods-SVWebViewController/Pods-SVWebViewController-Private.xcconfig
+++ b/iOSStudy/Pods/Target Support Files/Pods-SVWebViewController/Pods-SVWebViewController-Private.xcconfig
@@ -1,5 +1,5 @@
#include "Pods-SVWebViewController.xcconfig"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/SVWebViewController" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Mantle" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/SVWebViewController" "${PODS_ROOT}/Headers/Public/SWTableViewCell"
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/SVWebViewController" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Mantle" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/SVWebViewController" "${PODS_ROOT}/Headers/Public/SWTableViewCell" "${PODS_ROOT}/Headers/Public/Shimmer"
OTHER_LDFLAGS = -ObjC
PODS_ROOT = ${SRCROOT}
\ No newline at end of file
diff --git a/iOSStudy/Pods/Target Support Files/Pods-SWTableViewCell/Pods-SWTableViewCell-Private.xcconfig b/iOSStudy/Pods/Target Support Files/Pods-SWTableViewCell/Pods-SWTableViewCell-Private.xcconfig
index b29e583..c85ddcc 100644
--- a/iOSStudy/Pods/Target Support Files/Pods-SWTableViewCell/Pods-SWTableViewCell-Private.xcconfig
+++ b/iOSStudy/Pods/Target Support Files/Pods-SWTableViewCell/Pods-SWTableViewCell-Private.xcconfig
@@ -1,5 +1,5 @@
#include "Pods-SWTableViewCell.xcconfig"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/SWTableViewCell" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Mantle" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/SVWebViewController" "${PODS_ROOT}/Headers/Public/SWTableViewCell"
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/SWTableViewCell" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Mantle" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/SVWebViewController" "${PODS_ROOT}/Headers/Public/SWTableViewCell" "${PODS_ROOT}/Headers/Public/Shimmer"
OTHER_LDFLAGS = -ObjC
PODS_ROOT = ${SRCROOT}
\ No newline at end of file
diff --git a/iOSStudy/Pods/Target Support Files/Pods-Shimmer/Pods-Shimmer-Private.xcconfig b/iOSStudy/Pods/Target Support Files/Pods-Shimmer/Pods-Shimmer-Private.xcconfig
new file mode 100644
index 0000000..a0d7352
--- /dev/null
+++ b/iOSStudy/Pods/Target Support Files/Pods-Shimmer/Pods-Shimmer-Private.xcconfig
@@ -0,0 +1,5 @@
+#include "Pods-Shimmer.xcconfig"
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/Shimmer" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Mantle" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/SVWebViewController" "${PODS_ROOT}/Headers/Public/SWTableViewCell" "${PODS_ROOT}/Headers/Public/Shimmer"
+OTHER_LDFLAGS = -ObjC
+PODS_ROOT = ${SRCROOT}
\ No newline at end of file
diff --git a/iOSStudy/Pods/Target Support Files/Pods-Shimmer/Pods-Shimmer-dummy.m b/iOSStudy/Pods/Target Support Files/Pods-Shimmer/Pods-Shimmer-dummy.m
new file mode 100644
index 0000000..ad33922
--- /dev/null
+++ b/iOSStudy/Pods/Target Support Files/Pods-Shimmer/Pods-Shimmer-dummy.m
@@ -0,0 +1,5 @@
+#import
+@interface PodsDummy_Pods_Shimmer : NSObject
+@end
+@implementation PodsDummy_Pods_Shimmer
+@end
diff --git a/iOSStudy/Pods/Target Support Files/Pods-FMDB/Pods-FMDB-prefix.pch b/iOSStudy/Pods/Target Support Files/Pods-Shimmer/Pods-Shimmer-prefix.pch
similarity index 100%
rename from iOSStudy/Pods/Target Support Files/Pods-FMDB/Pods-FMDB-prefix.pch
rename to iOSStudy/Pods/Target Support Files/Pods-Shimmer/Pods-Shimmer-prefix.pch
diff --git a/iOSStudy/Pods/Target Support Files/Pods-Shimmer/Pods-Shimmer.xcconfig b/iOSStudy/Pods/Target Support Files/Pods-Shimmer/Pods-Shimmer.xcconfig
new file mode 100644
index 0000000..e69de29
diff --git a/iOSStudy/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown b/iOSStudy/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown
index 3b2ec91..b55e015 100644
--- a/iOSStudy/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown
+++ b/iOSStudy/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown
@@ -24,40 +24,9 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-## FMDB
-
-If you are using FMDB in your project, I'd love to hear about it. Let Gus know
-by sending an email to gus@flyingmeat.com.
-
-And if you happen to come across either Gus Mueller or Rob Ryan in a bar, you
-might consider purchasing a drink of their choosing if FMDB has been useful to
-you.
-
-Finally, and shortly, this is the MIT License.
-
-Copyright (c) 2008-2014 Flying Meat Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
## MJRefresh
-Copyright (c) 2013-2014 MJRefresh (https://github.com/CoderMJLee/MJRefresh)
+Copyright (c) 2013-2015 MJRefresh (https://github.com/CoderMJLee/MJRefresh)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -80,7 +49,7 @@ THE SOFTWARE.
## Mantle
-**Copyright (c) 2012 - 2014, GitHub, Inc.**
+**Copyright (c) GitHub, Inc.**
**All rights reserved.**
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
@@ -202,4 +171,38 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
+
+## Shimmer
+
+BSD License
+
+For Shimmer software
+
+Copyright (c) 2014, Facebook, Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ * Neither the name Facebook nor the names of its contributors may be used to
+ endorse or promote products derived from this software without specific
+ prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
Generated by CocoaPods - http://cocoapods.org
diff --git a/iOSStudy/Pods/Target Support Files/Pods/Pods-acknowledgements.plist b/iOSStudy/Pods/Target Support Files/Pods/Pods-acknowledgements.plist
index b34b32a..468f2c8 100644
--- a/iOSStudy/Pods/Target Support Files/Pods/Pods-acknowledgements.plist
+++ b/iOSStudy/Pods/Target Support Files/Pods/Pods-acknowledgements.plist
@@ -41,42 +41,7 @@ THE SOFTWARE.
FooterText
- If you are using FMDB in your project, I'd love to hear about it. Let Gus know
-by sending an email to gus@flyingmeat.com.
-
-And if you happen to come across either Gus Mueller or Rob Ryan in a bar, you
-might consider purchasing a drink of their choosing if FMDB has been useful to
-you.
-
-Finally, and shortly, this is the MIT License.
-
-Copyright (c) 2008-2014 Flying Meat Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
- Title
- FMDB
- Type
- PSGroupSpecifier
-
-
- FooterText
- Copyright (c) 2013-2014 MJRefresh (https://github.com/CoderMJLee/MJRefresh)
+ Copyright (c) 2013-2015 MJRefresh (https://github.com/CoderMJLee/MJRefresh)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -103,7 +68,7 @@ THE SOFTWARE.
FooterText
- **Copyright (c) 2012 - 2014, GitHub, Inc.**
+ **Copyright (c) GitHub, Inc.**
**All rights reserved.**
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
@@ -246,6 +211,44 @@ THE SOFTWARE.
Type
PSGroupSpecifier
+
+ FooterText
+ BSD License
+
+For Shimmer software
+
+Copyright (c) 2014, Facebook, Inc. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ * Neither the name Facebook nor the names of its contributors may be used to
+ endorse or promote products derived from this software without specific
+ prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ Title
+ Shimmer
+ Type
+ PSGroupSpecifier
+
FooterText
Generated by CocoaPods - http://cocoapods.org
diff --git a/iOSStudy/Pods/Target Support Files/Pods/Pods-environment.h b/iOSStudy/Pods/Target Support Files/Pods/Pods-environment.h
index 9ec3fd4..918b0dd 100644
--- a/iOSStudy/Pods/Target Support Files/Pods/Pods-environment.h
+++ b/iOSStudy/Pods/Target Support Files/Pods/Pods-environment.h
@@ -10,97 +10,79 @@
#define COCOAPODS_POD_AVAILABLE_AFNetworking
#define COCOAPODS_VERSION_MAJOR_AFNetworking 2
#define COCOAPODS_VERSION_MINOR_AFNetworking 5
-#define COCOAPODS_VERSION_PATCH_AFNetworking 1
+#define COCOAPODS_VERSION_PATCH_AFNetworking 3
// AFNetworking/NSURLConnection
#define COCOAPODS_POD_AVAILABLE_AFNetworking_NSURLConnection
#define COCOAPODS_VERSION_MAJOR_AFNetworking_NSURLConnection 2
#define COCOAPODS_VERSION_MINOR_AFNetworking_NSURLConnection 5
-#define COCOAPODS_VERSION_PATCH_AFNetworking_NSURLConnection 1
+#define COCOAPODS_VERSION_PATCH_AFNetworking_NSURLConnection 3
// AFNetworking/NSURLSession
#define COCOAPODS_POD_AVAILABLE_AFNetworking_NSURLSession
#define COCOAPODS_VERSION_MAJOR_AFNetworking_NSURLSession 2
#define COCOAPODS_VERSION_MINOR_AFNetworking_NSURLSession 5
-#define COCOAPODS_VERSION_PATCH_AFNetworking_NSURLSession 1
+#define COCOAPODS_VERSION_PATCH_AFNetworking_NSURLSession 3
// AFNetworking/Reachability
#define COCOAPODS_POD_AVAILABLE_AFNetworking_Reachability
#define COCOAPODS_VERSION_MAJOR_AFNetworking_Reachability 2
#define COCOAPODS_VERSION_MINOR_AFNetworking_Reachability 5
-#define COCOAPODS_VERSION_PATCH_AFNetworking_Reachability 1
+#define COCOAPODS_VERSION_PATCH_AFNetworking_Reachability 3
// AFNetworking/Security
#define COCOAPODS_POD_AVAILABLE_AFNetworking_Security
#define COCOAPODS_VERSION_MAJOR_AFNetworking_Security 2
#define COCOAPODS_VERSION_MINOR_AFNetworking_Security 5
-#define COCOAPODS_VERSION_PATCH_AFNetworking_Security 1
+#define COCOAPODS_VERSION_PATCH_AFNetworking_Security 3
// AFNetworking/Serialization
#define COCOAPODS_POD_AVAILABLE_AFNetworking_Serialization
#define COCOAPODS_VERSION_MAJOR_AFNetworking_Serialization 2
#define COCOAPODS_VERSION_MINOR_AFNetworking_Serialization 5
-#define COCOAPODS_VERSION_PATCH_AFNetworking_Serialization 1
+#define COCOAPODS_VERSION_PATCH_AFNetworking_Serialization 3
// AFNetworking/UIKit
#define COCOAPODS_POD_AVAILABLE_AFNetworking_UIKit
#define COCOAPODS_VERSION_MAJOR_AFNetworking_UIKit 2
#define COCOAPODS_VERSION_MINOR_AFNetworking_UIKit 5
-#define COCOAPODS_VERSION_PATCH_AFNetworking_UIKit 1
-
-// FMDB
-#define COCOAPODS_POD_AVAILABLE_FMDB
-#define COCOAPODS_VERSION_MAJOR_FMDB 2
-#define COCOAPODS_VERSION_MINOR_FMDB 5
-#define COCOAPODS_VERSION_PATCH_FMDB 0
-
-// FMDB/common
-#define COCOAPODS_POD_AVAILABLE_FMDB_common
-#define COCOAPODS_VERSION_MAJOR_FMDB_common 2
-#define COCOAPODS_VERSION_MINOR_FMDB_common 5
-#define COCOAPODS_VERSION_PATCH_FMDB_common 0
-
-// FMDB/standard
-#define COCOAPODS_POD_AVAILABLE_FMDB_standard
-#define COCOAPODS_VERSION_MAJOR_FMDB_standard 2
-#define COCOAPODS_VERSION_MINOR_FMDB_standard 5
-#define COCOAPODS_VERSION_PATCH_FMDB_standard 0
+#define COCOAPODS_VERSION_PATCH_AFNetworking_UIKit 3
// MJRefresh
#define COCOAPODS_POD_AVAILABLE_MJRefresh
-#define COCOAPODS_VERSION_MAJOR_MJRefresh 0
-#define COCOAPODS_VERSION_MINOR_MJRefresh 0
-#define COCOAPODS_VERSION_PATCH_MJRefresh 1
+#define COCOAPODS_VERSION_MAJOR_MJRefresh 1
+#define COCOAPODS_VERSION_MINOR_MJRefresh 4
+#define COCOAPODS_VERSION_PATCH_MJRefresh 6
// Mantle
#define COCOAPODS_POD_AVAILABLE_Mantle
-#define COCOAPODS_VERSION_MAJOR_Mantle 1
-#define COCOAPODS_VERSION_MINOR_Mantle 5
-#define COCOAPODS_VERSION_PATCH_Mantle 4
+#define COCOAPODS_VERSION_MAJOR_Mantle 2
+#define COCOAPODS_VERSION_MINOR_Mantle 0
+#define COCOAPODS_VERSION_PATCH_Mantle 0
// Mantle/extobjc
#define COCOAPODS_POD_AVAILABLE_Mantle_extobjc
-#define COCOAPODS_VERSION_MAJOR_Mantle_extobjc 1
-#define COCOAPODS_VERSION_MINOR_Mantle_extobjc 5
-#define COCOAPODS_VERSION_PATCH_Mantle_extobjc 4
+#define COCOAPODS_VERSION_MAJOR_Mantle_extobjc 2
+#define COCOAPODS_VERSION_MINOR_Mantle_extobjc 0
+#define COCOAPODS_VERSION_PATCH_Mantle_extobjc 0
// SDWebImage
#define COCOAPODS_POD_AVAILABLE_SDWebImage
#define COCOAPODS_VERSION_MAJOR_SDWebImage 3
#define COCOAPODS_VERSION_MINOR_SDWebImage 7
-#define COCOAPODS_VERSION_PATCH_SDWebImage 1
+#define COCOAPODS_VERSION_PATCH_SDWebImage 2
// SDWebImage/Core
#define COCOAPODS_POD_AVAILABLE_SDWebImage_Core
#define COCOAPODS_VERSION_MAJOR_SDWebImage_Core 3
#define COCOAPODS_VERSION_MINOR_SDWebImage_Core 7
-#define COCOAPODS_VERSION_PATCH_SDWebImage_Core 1
+#define COCOAPODS_VERSION_PATCH_SDWebImage_Core 2
// SVProgressHUD
#define COCOAPODS_POD_AVAILABLE_SVProgressHUD
#define COCOAPODS_VERSION_MAJOR_SVProgressHUD 1
#define COCOAPODS_VERSION_MINOR_SVProgressHUD 1
-#define COCOAPODS_VERSION_PATCH_SVProgressHUD 2
+#define COCOAPODS_VERSION_PATCH_SVProgressHUD 3
// SVWebViewController
#define COCOAPODS_POD_AVAILABLE_SVWebViewController
@@ -114,3 +96,9 @@
#define COCOAPODS_VERSION_MINOR_SWTableViewCell 3
#define COCOAPODS_VERSION_PATCH_SWTableViewCell 7
+// Shimmer
+#define COCOAPODS_POD_AVAILABLE_Shimmer
+#define COCOAPODS_VERSION_MAJOR_Shimmer 1
+#define COCOAPODS_VERSION_MINOR_Shimmer 0
+#define COCOAPODS_VERSION_PATCH_Shimmer 2
+
diff --git a/iOSStudy/Pods/Target Support Files/Pods/Pods.debug.xcconfig b/iOSStudy/Pods/Target Support Files/Pods/Pods.debug.xcconfig
index 0d3ecc7..a9ebf03 100644
--- a/iOSStudy/Pods/Target Support Files/Pods/Pods.debug.xcconfig
+++ b/iOSStudy/Pods/Target Support Files/Pods/Pods.debug.xcconfig
@@ -1,6 +1,6 @@
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Mantle" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/SVWebViewController" "${PODS_ROOT}/Headers/Public/SWTableViewCell"
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/FMDB" -isystem "${PODS_ROOT}/Headers/Public/MJRefresh" -isystem "${PODS_ROOT}/Headers/Public/Mantle" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" -isystem "${PODS_ROOT}/Headers/Public/SVProgressHUD" -isystem "${PODS_ROOT}/Headers/Public/SVWebViewController" -isystem "${PODS_ROOT}/Headers/Public/SWTableViewCell"
-OTHER_LDFLAGS = -ObjC -l"Pods-AFNetworking" -l"Pods-FMDB" -l"Pods-MJRefresh" -l"Pods-Mantle" -l"Pods-SDWebImage" -l"Pods-SVProgressHUD" -l"Pods-SVWebViewController" -l"Pods-SWTableViewCell" -l"sqlite3" -framework "CoreGraphics" -framework "Foundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration"
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Mantle" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/SVWebViewController" "${PODS_ROOT}/Headers/Public/SWTableViewCell" "${PODS_ROOT}/Headers/Public/Shimmer"
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/MJRefresh" -isystem "${PODS_ROOT}/Headers/Public/Mantle" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" -isystem "${PODS_ROOT}/Headers/Public/SVProgressHUD" -isystem "${PODS_ROOT}/Headers/Public/SVWebViewController" -isystem "${PODS_ROOT}/Headers/Public/SWTableViewCell" -isystem "${PODS_ROOT}/Headers/Public/Shimmer"
+OTHER_LDFLAGS = -ObjC -l"Pods-AFNetworking" -l"Pods-MJRefresh" -l"Pods-Mantle" -l"Pods-SDWebImage" -l"Pods-SVProgressHUD" -l"Pods-SVWebViewController" -l"Pods-SWTableViewCell" -l"Pods-Shimmer" -framework "CoreGraphics" -framework "Foundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration"
OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS)
PODS_ROOT = ${SRCROOT}/Pods
\ No newline at end of file
diff --git a/iOSStudy/Pods/Target Support Files/Pods/Pods.release.xcconfig b/iOSStudy/Pods/Target Support Files/Pods/Pods.release.xcconfig
index 0d3ecc7..a9ebf03 100644
--- a/iOSStudy/Pods/Target Support Files/Pods/Pods.release.xcconfig
+++ b/iOSStudy/Pods/Target Support Files/Pods/Pods.release.xcconfig
@@ -1,6 +1,6 @@
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/FMDB" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Mantle" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/SVWebViewController" "${PODS_ROOT}/Headers/Public/SWTableViewCell"
-OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/FMDB" -isystem "${PODS_ROOT}/Headers/Public/MJRefresh" -isystem "${PODS_ROOT}/Headers/Public/Mantle" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" -isystem "${PODS_ROOT}/Headers/Public/SVProgressHUD" -isystem "${PODS_ROOT}/Headers/Public/SVWebViewController" -isystem "${PODS_ROOT}/Headers/Public/SWTableViewCell"
-OTHER_LDFLAGS = -ObjC -l"Pods-AFNetworking" -l"Pods-FMDB" -l"Pods-MJRefresh" -l"Pods-Mantle" -l"Pods-SDWebImage" -l"Pods-SVProgressHUD" -l"Pods-SVWebViewController" -l"Pods-SWTableViewCell" -l"sqlite3" -framework "CoreGraphics" -framework "Foundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration"
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/Mantle" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SVProgressHUD" "${PODS_ROOT}/Headers/Public/SVWebViewController" "${PODS_ROOT}/Headers/Public/SWTableViewCell" "${PODS_ROOT}/Headers/Public/Shimmer"
+OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AFNetworking" -isystem "${PODS_ROOT}/Headers/Public/MJRefresh" -isystem "${PODS_ROOT}/Headers/Public/Mantle" -isystem "${PODS_ROOT}/Headers/Public/SDWebImage" -isystem "${PODS_ROOT}/Headers/Public/SVProgressHUD" -isystem "${PODS_ROOT}/Headers/Public/SVWebViewController" -isystem "${PODS_ROOT}/Headers/Public/SWTableViewCell" -isystem "${PODS_ROOT}/Headers/Public/Shimmer"
+OTHER_LDFLAGS = -ObjC -l"Pods-AFNetworking" -l"Pods-MJRefresh" -l"Pods-Mantle" -l"Pods-SDWebImage" -l"Pods-SVProgressHUD" -l"Pods-SVWebViewController" -l"Pods-SWTableViewCell" -l"Pods-Shimmer" -framework "CoreGraphics" -framework "Foundation" -framework "ImageIO" -framework "MobileCoreServices" -framework "QuartzCore" -framework "Security" -framework "SystemConfiguration"
OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS)
PODS_ROOT = ${SRCROOT}/Pods
\ No newline at end of file
diff --git a/iOSStudy/README.md b/iOSStudy/README.md
new file mode 100644
index 0000000..5e7dc73
--- /dev/null
+++ b/iOSStudy/README.md
@@ -0,0 +1,2 @@
+# iOSStudy
+iOSStudy是一个开源的iOS应用内容是致力于帮助iOS开发者找到适合自己的学习资源
diff --git a/iOSStudy/Tools/CoreDataUtils.h b/iOSStudy/Tools/CoreDataUtils.h
new file mode 100644
index 0000000..5dd64a9
--- /dev/null
+++ b/iOSStudy/Tools/CoreDataUtils.h
@@ -0,0 +1,41 @@
+//
+// CoreDataUtils.h
+// iOSStudy
+//
+// Created by chenguandong on 15/4/3.
+// Copyright (c) 2015年 chenguandong. All rights reserved.
+//
+
+#import
+
+@interface CoreDataUtils : NSObject
+/**
+ * 检查数据是否在表中已经存在
+ *
+ * @param tableName 表名
+ * @param predicate 查询条件
+ *
+ * @return YES 存在 NO不存在
+ */
++(BOOL)dataisExistTableName:(NSString*)tableName withPredicate:(NSPredicate*)predicate;
+
+
+/**
+ * 查询数据
+ * @param tableName 查询的表明称
+ * @param predicate NSPredicate 查询条件 nil时表示没有查询条件
+ *
+ * @return NSManagedObject 集合
+ */
++(NSArray*)queryDataFromTableName:(NSString*)tableName andNSPredicate:(NSPredicate*)predicate;
+
+
+/**
+ * 删除指定表中的数据
+
+ *
+ * @param tableName 表名
+ * @param andNSPredicate 删除条件 为nil 删除所有数据
+ */
++(void)deleteDateFromTableName:(NSString*)tableName andNSPredicate:(NSPredicate*)andNSPredicate;
+@end
diff --git a/iOSStudy/Tools/CoreDataUtils.m b/iOSStudy/Tools/CoreDataUtils.m
new file mode 100644
index 0000000..c1fe7ec
--- /dev/null
+++ b/iOSStudy/Tools/CoreDataUtils.m
@@ -0,0 +1,108 @@
+//
+// CoreDataUtils.m
+// iOSStudy
+//
+// Created by chenguandong on 15/4/3.
+// Copyright (c) 2015年 chenguandong. All rights reserved.
+//
+
+#import "CoreDataUtils.h"
+#import
+#import "Constants .h"
+@implementation CoreDataUtils
+
+/**
+ * 检查数据是否在表中已经存在
+ *
+ * @param url http地址
+ * @param tableName 表名
+ * @param rowName 数据所在的列名
+ *
+ * @return YES 存在 NO 不存在
+ */
++(BOOL)dataisExistTableName:(NSString*)tableName withPredicate:(NSPredicate*)predicate{
+
+ NSError *error;
+ NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
+ NSEntityDescription *entity = [NSEntityDescription
+ entityForName:tableName inManagedObjectContext:SharedApp.managedObjectContext];
+ [fetchRequest setEntity:entity];
+
+ if (predicate) {
+ fetchRequest.predicate = predicate;
+ }
+
+ NSArray *fetchedObjects = [SharedApp.managedObjectContext executeFetchRequest:fetchRequest error:&error];
+
+
+
+ //NSPredicate *titlePredicate = [NSPredicate predicateWithFormat:@"%@ = %@",rowName, url];
+
+
+ if (fetchedObjects.count!=0) {
+ // NSLog(@"111%lu",resultArr.count);
+ return YES;
+ }else{
+ // NSLog(@"222%lu",resultArr.count);
+ return NO;
+ }
+
+
+}
+
+/**
+ * 查询数据
+ * @param tableName 查询的表明称
+ * @param predicate NSPredicate 查询条件 nil时表示没有查询条件
+ *
+ * @return NSManagedObject 集合
+ */
++(NSArray*)queryDataFromTableName:(NSString*)tableName andNSPredicate:(NSPredicate*)predicate{
+
+ NSError *error;
+ NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
+ NSEntityDescription *entity = [NSEntityDescription
+ entityForName:tableName inManagedObjectContext:SharedApp.managedObjectContext];
+ [fetchRequest setEntity:entity];
+
+ // NSPredicate *titlePredicate = [NSPredicate predicateWithFormat:@"url= %@", url];
+ if (predicate) {
+ fetchRequest.predicate = predicate;
+ }
+
+ NSArray *fetchedObjects = [SharedApp.managedObjectContext executeFetchRequest:fetchRequest error:&error];
+
+
+ return [fetchedObjects filteredArrayUsingPredicate:predicate];
+
+
+}
+
+
+/**
+ * 删除指定表中的数据
+
+ *
+ * @param tableName 表名
+ * @param andNSPredicate 删除条件 为nil 删除所有数据
+ */
++(void)deleteDateFromTableName:(NSString*)tableName andNSPredicate:(NSPredicate*)andNSPredicate{
+ //存储之前先删除原来的数据
+
+ //NSPredicate *titlePredicate = [NSPredicate predicateWithFormat:@"type= %@", @"11"];
+
+ NSArray* managerObjtList = [CoreDataUtils queryDataFromTableName:tableName andNSPredicate:andNSPredicate];
+
+ for (NSManagedObject *obct in managerObjtList) {
+ [SharedApp.managedObjectContext deleteObject:obct];
+ }
+
+
+ NSError *error = nil;
+ if (![SharedApp.managedObjectContext save:&error]) {
+ NSLog(@"Can't Delete! %@ %@", error, [error localizedDescription]);
+ return;
+ }
+
+}
+@end
diff --git a/iOSStudy/Tools/HttpVersionTools.h b/iOSStudy/Tools/HttpVersionTools.h
new file mode 100644
index 0000000..fbb382d
--- /dev/null
+++ b/iOSStudy/Tools/HttpVersionTools.h
@@ -0,0 +1,79 @@
+//
+// HttpVersionTools.h
+// iOSStudy
+//
+// Created by chenguandong on 15/4/2.
+// Copyright (c) 2015年 chenguandong. All rights reserved.
+//
+
+#import
+
+
+/**
+ * 网络请求成功回调
+ */
+typedef void (^versionSuccess)(NSArray*versionLists);
+/**
+ * 网络请求失败回调
+ */
+typedef void (^versionError)();
+
+/**
+ * 网络是否链接回调
+ *
+ * @param isNetWorking YES 有网络 NO 没有网络
+ */
+typedef void (^versionNetWorking)(BOOL isNetWorking);
+
+
+@interface HttpVersionTools : NSObject
+
+
+/**
+ * 得到当前服务器版本号列表
+ *
+ * @return 服务器版本号列表
+ */
++(void)getVersions:(versionSuccess)v_success v_error:(versionError)v_error v_netWork:(versionNetWorking)v_netWork;
+
+
+/**
+ * 判断版本号是否向服务器请求最新数据
+ *
+ * @param url http请求地址
+ *
+ * @return YES 发送请求 NO 不发送请求
+ */
++(BOOL)checkHttpVersion:(NSString*)url nowVersion:(NSString*)nowVersion;
+
+
+/**
+ * 返回服务器当前url版本号
+ *
+ * @param url http请求地址
+ *
+ * @return 服务器当前url版本号
+ */
++(NSString*)getNowHttpVersion:(NSString*)url;
+
+
+/**
+ * 得到URL本地版本号
+ *
+ * @param url URL地址
+ *
+ * @return !nil 本地版本号 nil 没有本地版本号
+ */
++(NSString*)getLocalHttpVersion:(NSString*)url;
+
+
+
+/**
+ * 存储当前服务器返回的版本号
+ *
+ * @param url http 请求地址
+ * @param version 版本号
+ */
++(void)saveNowHttpVersion:(NSString*)url version:(NSString*)version;
+
+@end
diff --git a/iOSStudy/Tools/HttpVersionTools.m b/iOSStudy/Tools/HttpVersionTools.m
new file mode 100644
index 0000000..087f8b6
--- /dev/null
+++ b/iOSStudy/Tools/HttpVersionTools.m
@@ -0,0 +1,204 @@
+//
+// HttpVersionTools.m
+// iOSStudy
+//
+// Created by chenguandong on 15/4/2.
+// Copyright (c) 2015年 chenguandong. All rights reserved.
+//
+
+#import "HttpVersionTools.h"
+#import "NetWorkTools.h"
+#import "JsonTools.h"
+#import
+#import "VersionBean.h"
+#import "CoreDataUtils.h"
+@implementation HttpVersionTools
+
++(void)getVersions:(versionSuccess)v_success v_error:(versionError)v_error v_netWork:(versionNetWorking)v_netWork{
+
+
+ __block NSMutableArray*versionArr = [NSMutableArray arrayWithCapacity:5];
+
+ [NetWorkTools postHttp:Adress_versions success:^(AFHTTPRequestOperation *operation, id responseObject) {
+
+ NSLog(@"JSON: %@", [operation responseString]);
+
+ NSArray *dic = [JsonTools getJsonNSDictionary:[operation responseString]];
+
+ //将JSON数据和Model的属性进行绑定
+
+ NSArray *arr = [MTLJSONAdapter modelsOfClass:[VersionBean class] fromJSONArray:dic error:nil];
+
+ versionArr = [arr copy];
+
+// for (VersionBean *vBean in versionArr) {
+// NSLog(@"version =%@",vBean.urlVersion);
+// }
+
+ v_success(versionArr);
+
+ } error:^(AFHTTPRequestOperation *operation, NSError *error) {
+ NSLog(@"Error: %@", error);
+
+ v_error();
+
+ } isNetworking:^(BOOL isNetwork) {
+
+
+ v_netWork(isNetwork);
+ }];
+
+
+}
+
+/**
+ * 返回服务器当前url版本号
+ *
+ * @param url http请求地址
+ *
+ * @return 服务器当前url版本号
+ */
++(NSString*)getNowHttpVersion:(NSString*)url{
+
+ NSString *versionStr ;
+ for (VersionBean *vBean in SharedApp.versionLists) {
+
+
+ if ([vBean.url isEqualToString:url]) {
+
+ versionStr = vBean.urlVersion;
+ return versionStr;
+ }else{
+ versionStr = nil;
+ }
+ }
+ NSLog(@"nowVersion = %@",versionStr);
+ return versionStr;
+}
+
+
+/**
+ * 存储当前服务器返回的版本号
+ *
+ * @param url http 请求地址
+ * @param version 版本号
+ */
++(void)saveNowHttpVersion:(NSString*)url version:(NSString*)version{
+
+ NSString *log ;
+
+ //当数据存在事后执行更新操作
+ //[CoreDataUtils dataisExist:url inTable:CD_VersionsEntity tableRowName:@"url"]
+ NSPredicate *urlPredicate = [NSPredicate predicateWithFormat:@"url = %@", url];
+ if (
+ [CoreDataUtils dataisExistTableName:CD_VersionsEntity withPredicate:urlPredicate]
+ )
+
+ {
+
+
+ NSPredicate *urlPredicate = [NSPredicate predicateWithFormat:@"url= %@", url];
+
+ NSArray *managerList = [CoreDataUtils queryDataFromTableName:CD_VersionsEntity andNSPredicate:urlPredicate];
+
+ if (managerList.count!=0) {
+ NSManagedObject *updateObjt= managerList.firstObject;
+ [updateObjt setValue:url forKey:@"url"];
+ [updateObjt setValue:version forKey:@"url_version"];
+ }
+
+ log = @"版本更新成功";
+
+ }
+ else
+ //当数据不存在的事后执行插入操作
+ {
+ NSManagedObject *managerObjt =[NSEntityDescription insertNewObjectForEntityForName:CD_VersionsEntity inManagedObjectContext:SharedApp.managedObjectContext];
+
+
+ [managerObjt setValue:url forKey:@"url"];
+ [managerObjt setValue:version forKey:@"url_version"];;
+
+ log = @"版本插入成功";
+
+ }
+
+ NSError *error;
+ if (![SharedApp.managedObjectContext save:&error])
+ {
+ NSLog(@"%@: %@", log,[error localizedDescription]);
+
+ }
+
+
+}
+
+
+
+/**
+ * 判断版本号是否向服务器请求最新数据
+ *
+ * @param url http请求地址
+ *
+ * @return YES 发送请求 NO 不发送请求
+ */
++(BOOL)checkHttpVersion:(NSString*)url nowVersion:(NSString*)nowVersion{
+
+
+
+
+ if (nowVersion!=nil) {
+ //从数据库拿到URL 版本号 如果没有说明第一次请求 直接发送请求
+
+ if ([[self getLocalHttpVersion:url]floatValue]!=[nowVersion floatValue]) {
+
+
+
+ return YES;
+ }else{
+ return NO;
+ }
+ }else{
+ return YES;
+ }
+
+
+}
+
+/**
+ * 得到URL本地版本号
+ *
+ * @param url URL地址
+ *
+ * @return !nil 本地版本号 nil 没有本地版本号
+ */
++(NSString*)getLocalHttpVersion:(NSString*)url{
+ NSError *error;
+ NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
+ NSEntityDescription *entity = [NSEntityDescription
+ entityForName:CD_VersionsEntity inManagedObjectContext:SharedApp.managedObjectContext];
+ [fetchRequest setEntity:entity];
+
+ NSArray *fetchedObjects = [SharedApp.managedObjectContext executeFetchRequest:fetchRequest error:&error];
+
+
+ NSPredicate *titlePredicate = [NSPredicate predicateWithFormat:@"url = %@", url];
+
+
+ NSArray *resultArr = [fetchedObjects filteredArrayUsingPredicate:titlePredicate];
+ if (resultArr.count!=0) {
+ NSLog(@"111%lu",resultArr.count);
+
+ NSManagedObject *objt = resultArr[0];
+
+
+ return [objt valueForKey:@"url_version"];
+ }else{
+ NSLog(@"没有查到本地版本%lu",resultArr.count);
+ return nil;
+ }
+
+
+}
+
+@end
diff --git a/iOSStudy/Tools/NetWorkTools.m b/iOSStudy/Tools/NetWorkTools.m
index 0b30257..1f35168 100644
--- a/iOSStudy/Tools/NetWorkTools.m
+++ b/iOSStudy/Tools/NetWorkTools.m
@@ -24,6 +24,7 @@ + (instancetype)sharedInstance {
+(void)postHttp:(NSString*)httpUrl success:(success)success error:(error)error isNetworking:(isNetwork)isNetworking{
+
if (SharedApp.isNetworking) {
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
@@ -50,56 +51,7 @@ +(void)postHttp:(NSString*)httpUrl success:(success)success error:(error)error i
+(void)checkNetworking{
-
-
-
- // Allocate a reachability object
- Reachability* reach = [Reachability reachabilityWithHostname:@"http://www.baidu.com"];
-
- // Set the blocks
- reach.reachableBlock = ^(Reachability*reach)
- {
- // keep in mind this is called on a background thread
- // and if you are updating the UI it needs to happen
- // on the main thread, like this:
-
- NSLog(@"网络已经连接!");
-
-
- SharedApp.isNetworking = YES;
-
- [SVProgressHUD dismiss];
-
-
- };
-
- reach.unreachableBlock = ^(Reachability*reach)
- {
- NSLog(@"网络断开!");
-
- SharedApp.isNetworking = YES;
-
- dispatch_async(dispatch_get_main_queue(), ^{
-
- [SVProgressHUD showErrorWithStatus:@"无网络连接" maskType:SVProgressHUDMaskTypeGradient];
-
- double delayInSeconds = 2.0;
- dispatch_time_t
- popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
- dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
- // code to be executed on the main queue after delay
-
- [SVProgressHUD dismiss];
- });
- });
-
- };
-
- // Start the notifier, which will cause the reachability object to retain itself!
- [reach startNotifier];
-
-
-
+
}
diff --git a/iOSStudy/Tools/WelcomeTools.h b/iOSStudy/Tools/WelcomeTools.h
new file mode 100644
index 0000000..e01fd95
--- /dev/null
+++ b/iOSStudy/Tools/WelcomeTools.h
@@ -0,0 +1,18 @@
+//
+// WelcomeTools.h
+// iOSStudy
+//
+// Created by chenguandong on 15/4/10.
+// Copyright (c) 2015年 chenguandong. All rights reserved.
+//
+
+#import
+#import "Reachability.h"
+
+static Reachability *reach;
+@interface WelcomeTools : NSObject
+
++ (instancetype)sharedInstance ;
+
+
+@end
diff --git a/iOSStudy/Tools/WelcomeTools.m b/iOSStudy/Tools/WelcomeTools.m
new file mode 100644
index 0000000..13a4447
--- /dev/null
+++ b/iOSStudy/Tools/WelcomeTools.m
@@ -0,0 +1,108 @@
+//
+// WelcomeTools.m
+// iOSStudy
+//
+// Created by chenguandong on 15/4/10.
+// Copyright (c) 2015年 chenguandong. All rights reserved.
+//
+
+#import "WelcomeTools.h"
+#import "HttpVersionTools.h"
+#import "Constants .h"
+#import "NetWorkTools.h"
+#import
+#import "Reachability.h"
+#import "NotificationCenterConstants.h"
+@implementation WelcomeTools
+{
+
+}
++ (instancetype)sharedInstance {
+ static dispatch_once_t once;
+ static id sharedInstance;
+ dispatch_once(&once, ^{
+ sharedInstance = [[self alloc] init];
+
+ [self initNetWork];
+
+ });
+ return sharedInstance;
+}
+
+
++(void)initNetWork{
+ // Allocate a reachability object
+ reach = [Reachability reachabilityWithHostname:@"www.baidu.com"];
+
+ // Set the blocks
+ reach.reachableBlock = ^(Reachability*reach)
+ {
+ // keep in mind this is called on a background thread
+ // and if you are updating the UI it needs to happen
+ // on the main thread, like this:
+
+ NSLog(@"网络已经连接!");
+
+
+ SharedApp.isNetworking = YES;
+
+ [SVProgressHUD dismiss];
+
+ if (!SharedApp.versionLists) {
+ [self regetHttpVersion];
+ }
+
+
+ };
+
+ reach.unreachableBlock = ^(Reachability*reach)
+ {
+ NSLog(@"网络断开!");
+
+ SharedApp.isNetworking = NO;
+
+ dispatch_async(dispatch_get_main_queue(), ^{
+
+ [SVProgressHUD showErrorWithStatus:@"无网络连接" maskType:SVProgressHUDMaskTypeGradient];
+
+ double delayInSeconds = 2.0;
+ dispatch_time_t
+ popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
+ dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
+ // code to be executed on the main queue after delay
+ [self sendVersionSuccess];
+ [SVProgressHUD dismiss];
+ });
+ });
+
+ };
+
+ // Start the notifier, which will cause the reachability object to retain itself!
+ [reach startNotifier];
+
+
+
+}
+
+-(void)dealloc{
+ [reach stopNotifier];
+}
+
++(void)regetHttpVersion{
+ //获取服务器HTTP当前版本号
+
+ [HttpVersionTools getVersions:^(NSArray *versionLists) {
+ SharedApp.versionLists = versionLists;
+ [self sendVersionSuccess];
+ } v_error:^{
+ [self sendVersionSuccess];
+ } v_netWork:^(BOOL isNetWorking) {
+ [self sendVersionSuccess];
+ }];
+}
+
++(void)sendVersionSuccess{
+ [[NSNotificationCenter defaultCenter]postNotificationName:notifacationVersionSuccess object:nil userInfo:nil];
+}
+
+@end
diff --git a/iOSStudy/ViewColl/BlogDetailViewController.m b/iOSStudy/ViewColl/BlogDetailViewController.m
index d1e511c..16b36ab 100644
--- a/iOSStudy/ViewColl/BlogDetailViewController.m
+++ b/iOSStudy/ViewColl/BlogDetailViewController.m
@@ -7,7 +7,6 @@
//
#import "BlogDetailViewController.h"
-#import "DBUtils.h"
@interface BlogDetailViewController ()
@end
@@ -17,9 +16,7 @@ @implementation BlogDetailViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
- [DBUtils executeSQL:^(FMDatabase *db) {
-
- }];
+
}
- (void)didReceiveMemoryWarning {
diff --git a/iOSStudy/iOSStudy.xcodeproj/project.pbxproj b/iOSStudy/iOSStudy.xcodeproj/project.pbxproj
index 77fbb5b..2a6ae61 100644
--- a/iOSStudy/iOSStudy.xcodeproj/project.pbxproj
+++ b/iOSStudy/iOSStudy.xcodeproj/project.pbxproj
@@ -7,33 +7,46 @@
objects = {
/* Begin PBXBuildFile section */
- 184F48AF1A93321700C5C22F /* SecondViewControllerViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 184F48AE1A93321700C5C22F /* SecondViewControllerViewModel.m */; };
+ 1839702E1B0182720098318E /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 18B23B231A7A14D100E80854 /* Info.plist */; };
+ 183970351B01A6C50098318E /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 183970371B01A6C50098318E /* Localizable.strings */; };
+ 184F48AF1A93321700C5C22F /* WebViewControllerViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 184F48AE1A93321700C5C22F /* WebViewControllerViewModel.m */; };
184F48B41A93340F00C5C22F /* WebBean.m in Sources */ = {isa = PBXBuildFile; fileRef = 184F48B31A93340F00C5C22F /* WebBean.m */; };
185EEB4B1A98DC9900BFDB79 /* SettingTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 185EEB4A1A98DC9900BFDB79 /* SettingTableViewController.m */; };
185EEB4F1A98E0BA00BFDB79 /* tabbar_setting.png in Resources */ = {isa = PBXBuildFile; fileRef = 185EEB4C1A98E0BA00BFDB79 /* tabbar_setting.png */; };
185EEB501A98E0BA00BFDB79 /* tabbar_setting@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 185EEB4D1A98E0BA00BFDB79 /* tabbar_setting@2x.png */; };
185EEB511A98E0BA00BFDB79 /* tabbar_setting@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 185EEB4E1A98E0BA00BFDB79 /* tabbar_setting@3x.png */; };
+ 187E96991AD6BED500D164FA /* NotificationCenterConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 187E96981AD6BED500D164FA /* NotificationCenterConstants.m */; };
+ 189BC7DC1AE4ED7C0051EDCD /* UINavigationBar+Awesome.m in Sources */ = {isa = PBXBuildFile; fileRef = 189BC7DB1AE4ED7C0051EDCD /* UINavigationBar+Awesome.m */; };
189EF8331A8399B100F19327 /* BlogBean.m in Sources */ = {isa = PBXBuildFile; fileRef = 189EF8321A8399B100F19327 /* BlogBean.m */; };
189EF8361A839FC600F19327 /* JsonTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 189EF8351A839FC600F19327 /* JsonTools.m */; };
189EF83A1A83C3AF00F19327 /* BlogDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 189EF8391A83C3AF00F19327 /* BlogDetailViewController.m */; };
18A998931A7C77D0002E7219 /* NetWorkTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 18A998921A7C77D0002E7219 /* NetWorkTools.m */; };
18AB47951A99969600E4C030 /* VideoBean.m in Sources */ = {isa = PBXBuildFile; fileRef = 18AB47941A99969600E4C030 /* VideoBean.m */; };
- 18AB47981A99A51200E4C030 /* BaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 18AB47971A99A51200E4C030 /* BaseTableViewCell.m */; };
18AB479B1A9C59CB00E4C030 /* UIImage+Resize.m in Sources */ = {isa = PBXBuildFile; fileRef = 18AB479A1A9C59CB00E4C030 /* UIImage+Resize.m */; };
- 18AB479F1A9C5E3300E4C030 /* VideoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 18AB479E1A9C5E3300E4C030 /* VideoCell.m */; };
- 18AB47A51A9C82FA00E4C030 /* AddBlogTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 18AB47A41A9C82FA00E4C030 /* AddBlogTableViewController.m */; };
- 18AB47A81A9DA40500E4C030 /* DBUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 18AB47A71A9DA40500E4C030 /* DBUtils.m */; };
18AB47AB1AA415A400E4C030 /* FavouriteBean.m in Sources */ = {isa = PBXBuildFile; fileRef = 18AB47AA1AA415A400E4C030 /* FavouriteBean.m */; };
18B23B251A7A14D100E80854 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 18B23B241A7A14D100E80854 /* main.m */; };
18B23B281A7A14D100E80854 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 18B23B271A7A14D100E80854 /* AppDelegate.m */; };
- 18B23B2B1A7A14D100E80854 /* FirstViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 18B23B2A1A7A14D100E80854 /* FirstViewController.m */; };
- 18B23B2E1A7A14D100E80854 /* SecondViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 18B23B2D1A7A14D100E80854 /* SecondViewController.m */; };
+ 18B23B2B1A7A14D100E80854 /* BlogViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 18B23B2A1A7A14D100E80854 /* BlogViewController.m */; };
+ 18B23B2E1A7A14D100E80854 /* WebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 18B23B2D1A7A14D100E80854 /* WebViewController.m */; };
18B23B311A7A14D100E80854 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 18B23B2F1A7A14D100E80854 /* Main.storyboard */; };
18B23B331A7A14D100E80854 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 18B23B321A7A14D100E80854 /* Images.xcassets */; };
- 18B23B361A7A14D100E80854 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 18B23B341A7A14D100E80854 /* LaunchScreen.xib */; };
18B23B421A7A14D100E80854 /* iOSStudyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 18B23B411A7A14D100E80854 /* iOSStudyTests.m */; };
18B23B4D1A7A234800E80854 /* BaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 18B23B4C1A7A234800E80854 /* BaseViewController.m */; };
- 18CECC0A1A91ACB7005598E4 /* FirstViewControllerViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 18CECC091A91ACB7005598E4 /* FirstViewControllerViewModel.m */; };
+ 18C845091ACCFC690053884F /* HttpVersionTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 18C845081ACCFC690053884F /* HttpVersionTools.m */; };
+ 18C8450C1ACD41C40053884F /* BlogJsonBean.m in Sources */ = {isa = PBXBuildFile; fileRef = 18C8450B1ACD41C40053884F /* BlogJsonBean.m */; };
+ 18C8450F1ACE3E580053884F /* CoreDataUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 18C8450E1ACE3E580053884F /* CoreDataUtils.m */; };
+ 18C845121ACE4A580053884F /* WelcomeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 18C845111ACE4A580053884F /* WelcomeViewController.m */; };
+ 18C845151ACE56150053884F /* MainTabBarViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 18C845141ACE56150053884F /* MainTabBarViewController.m */; };
+ 18CB71211AD55BFD00D72204 /* libPushSDK-1.8.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 18CB71201AD55BFD00D72204 /* libPushSDK-1.8.3.a */; };
+ 18CB71241AD56C2100D72204 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18CB71231AD56C2000D72204 /* CFNetwork.framework */; };
+ 18CB71261AD56C3000D72204 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18CB71251AD56C3000D72204 /* CoreFoundation.framework */; };
+ 18CB71281AD56C4000D72204 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18CB71271AD56C4000D72204 /* CoreTelephony.framework */; };
+ 18CB712A1AD56C6200D72204 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 18CB71291AD56C6200D72204 /* libz.dylib */; };
+ 18CB712C1AD570B200D72204 /* PushConfig.plist in Resources */ = {isa = PBXBuildFile; fileRef = 18CB712B1AD570B200D72204 /* PushConfig.plist */; };
+ 18CECC0A1A91ACB7005598E4 /* BlogViewControllerViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 18CECC091A91ACB7005598E4 /* BlogViewControllerViewModel.m */; };
+ 18D184821AD28D1900188C3C /* FavouriteTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 18D184811AD28D1900188C3C /* FavouriteTableViewController.m */; };
+ 18D184851AD2904900188C3C /* FavouriteViewControllerViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 18D184841AD2904900188C3C /* FavouriteViewControllerViewModel.m */; };
+ 18D184871AD2E0B700188C3C /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18D184861AD2E0B700188C3C /* MessageUI.framework */; };
18D201161A95A6F400D5F095 /* icon_29.png in Resources */ = {isa = PBXBuildFile; fileRef = 18D2010D1A95A6F400D5F095 /* icon_29.png */; };
18D201171A95A6F400D5F095 /* icon_40.png in Resources */ = {isa = PBXBuildFile; fileRef = 18D2010E1A95A6F400D5F095 /* icon_40.png */; };
18D201181A95A6F400D5F095 /* icon_58.png in Resources */ = {isa = PBXBuildFile; fileRef = 18D2010F1A95A6F400D5F095 /* icon_58.png */; };
@@ -52,19 +65,56 @@
18D2012E1A95A9D600D5F095 /* tabbar_web.png in Resources */ = {isa = PBXBuildFile; fileRef = 18D201281A95A9D600D5F095 /* tabbar_web.png */; };
18D2012F1A95A9D600D5F095 /* tabbar_web@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 18D201291A95A9D600D5F095 /* tabbar_web@2x.png */; };
18D201301A95A9D600D5F095 /* tabbar_web@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 18D2012A1A95A9D600D5F095 /* tabbar_web@3x.png */; };
- 18D201351A96090A00D5F095 /* app_img_640.png in Resources */ = {isa = PBXBuildFile; fileRef = 18D201321A96090A00D5F095 /* app_img_640.png */; };
- 18D201361A96090A00D5F095 /* app_img_1136.png in Resources */ = {isa = PBXBuildFile; fileRef = 18D201331A96090A00D5F095 /* app_img_1136.png */; };
- 18D201371A96090A00D5F095 /* app_img_iOS8.png in Resources */ = {isa = PBXBuildFile; fileRef = 18D201341A96090A00D5F095 /* app_img_iOS8.png */; };
- 18D2013C1A960B6100D5F095 /* app_img_768x1024.png in Resources */ = {isa = PBXBuildFile; fileRef = 18D201381A960B6100D5F095 /* app_img_768x1024.png */; };
- 18D2013D1A960B6100D5F095 /* app_img_1024x768.png in Resources */ = {isa = PBXBuildFile; fileRef = 18D201391A960B6100D5F095 /* app_img_1024x768.png */; };
- 18D2013E1A960B6100D5F095 /* app_img_1536x2048.png in Resources */ = {isa = PBXBuildFile; fileRef = 18D2013A1A960B6100D5F095 /* app_img_1536x2048.png */; };
- 18D2013F1A960B6100D5F095 /* app_img_2048x1536.png in Resources */ = {isa = PBXBuildFile; fileRef = 18D2013B1A960B6100D5F095 /* app_img_2048x1536.png */; };
- 18D201421A96143300D5F095 /* ThirdViewControllerViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 18D201411A96143300D5F095 /* ThirdViewControllerViewModel.m */; };
- 18D908A71A8A205600B42A42 /* ThirdTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 18D908A61A8A205600B42A42 /* ThirdTableViewController.m */; };
+ 18D201421A96143300D5F095 /* VideoViewControllerViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 18D201411A96143300D5F095 /* VideoViewControllerViewModel.m */; };
+ 18D4ECA61AD17F56009FE9F0 /* EntityConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 18D4ECA51AD17F56009FE9F0 /* EntityConstants.m */; };
+ 18D908A71A8A205600B42A42 /* VideoTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 18D908A61A8A205600B42A42 /* VideoTableViewController.m */; };
18DF6D3D1A80D3BC005751E8 /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 18DF6D3C1A80D3BC005751E8 /* Reachability.m */; };
18DF6D3F1A80D40D005751E8 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18DF6D3E1A80D40D005751E8 /* SystemConfiguration.framework */; };
18E016AA1ACAA898002A6E59 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18E016A91ACAA898002A6E59 /* CoreData.framework */; };
18E016E51ACAAB35002A6E59 /* iOSStudy.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 18E016E31ACAAB35002A6E59 /* iOSStudy.xcdatamodeld */; };
+ 18E2796A1AD61AD50056CC5F /* iRate.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 18E279671AD61AD50056CC5F /* iRate.bundle */; };
+ 18E2796B1AD61AD50056CC5F /* iRate.m in Sources */ = {isa = PBXBuildFile; fileRef = 18E279691AD61AD50056CC5F /* iRate.m */; };
+ 18E2796E1AD6206F0056CC5F /* LicenesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 18E2796D1AD6206F0056CC5F /* LicenesViewController.m */; };
+ 18E279711AD62CD80056CC5F /* licenes.html in Resources */ = {isa = PBXBuildFile; fileRef = 18E279701AD62CD80056CC5F /* licenes.html */; };
+ 18E3600A1AD67BB500A077B2 /* STBaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 18E360081AD67BB500A077B2 /* STBaseTableViewCell.m */; };
+ 18E3600B1AD67BB500A077B2 /* STBaseTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 18E360091AD67BB500A077B2 /* STBaseTableViewCell.xib */; };
+ 18E6A0B51ACCF7FD00B28D32 /* VersionBean.m in Sources */ = {isa = PBXBuildFile; fileRef = 18E6A0B41ACCF7FD00B28D32 /* VersionBean.m */; };
+ 18EC479E1AD773A200C397E5 /* WelcomeTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EC479D1AD773A200C397E5 /* WelcomeTools.m */; };
+ 18EC47A81AD7949100C397E5 /* img_640x960.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC479F1AD7949100C397E5 /* img_640x960.png */; };
+ 18EC47A91AD7949100C397E5 /* img_640x1136.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47A01AD7949100C397E5 /* img_640x1136.png */; };
+ 18EC47AA1AD7949100C397E5 /* img_750x1334.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47A11AD7949100C397E5 /* img_750x1334.png */; };
+ 18EC47AB1AD7949100C397E5 /* img_768x1024.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47A21AD7949100C397E5 /* img_768x1024.png */; };
+ 18EC47AC1AD7949100C397E5 /* img_1024x768.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47A31AD7949100C397E5 /* img_1024x768.png */; };
+ 18EC47AD1AD7949100C397E5 /* img_1242x2208.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47A41AD7949100C397E5 /* img_1242x2208.png */; };
+ 18EC47AE1AD7949100C397E5 /* img_1536x2048.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47A51AD7949100C397E5 /* img_1536x2048.png */; };
+ 18EC47AF1AD7949100C397E5 /* img_2048x1536.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47A61AD7949100C397E5 /* img_2048x1536.png */; };
+ 18EC47B01AD7949100C397E5 /* img_2208x1242.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47A71AD7949100C397E5 /* img_2208x1242.png */; };
+ 18EC47B91AD7AE3200C397E5 /* welcome_bg.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47B71AD7AE3200C397E5 /* welcome_bg.png */; };
+ 18EC47BA1AD7AE3200C397E5 /* welcome_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47B81AD7AE3200C397E5 /* welcome_icon.png */; };
+ 18EC47BE1AD7C22300C397E5 /* about_us.html in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47BD1AD7C22300C397E5 /* about_us.html */; };
+ 18EC47D41AD7C62F00C397E5 /* anim_01.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47C01AD7C62F00C397E5 /* anim_01.png */; };
+ 18EC47D51AD7C62F00C397E5 /* anim_02.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47C11AD7C62F00C397E5 /* anim_02.png */; };
+ 18EC47D61AD7C62F00C397E5 /* anim_03.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47C21AD7C62F00C397E5 /* anim_03.png */; };
+ 18EC47D71AD7C62F00C397E5 /* anim_04.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47C31AD7C62F00C397E5 /* anim_04.png */; };
+ 18EC47D81AD7C62F00C397E5 /* anim_05.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47C41AD7C62F00C397E5 /* anim_05.png */; };
+ 18EC47D91AD7C62F00C397E5 /* anim_06.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47C51AD7C62F00C397E5 /* anim_06.png */; };
+ 18EC47DA1AD7C62F00C397E5 /* anim_07.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47C61AD7C62F00C397E5 /* anim_07.png */; };
+ 18EC47DB1AD7C62F00C397E5 /* anim_08.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47C71AD7C62F00C397E5 /* anim_08.png */; };
+ 18EC47DC1AD7C62F00C397E5 /* anim_09.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47C81AD7C62F00C397E5 /* anim_09.png */; };
+ 18EC47DD1AD7C62F00C397E5 /* anim_10.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47C91AD7C62F00C397E5 /* anim_10.png */; };
+ 18EC47DE1AD7C62F00C397E5 /* anim_11.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47CA1AD7C62F00C397E5 /* anim_11.png */; };
+ 18EC47DF1AD7C62F00C397E5 /* anim_12.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47CB1AD7C62F00C397E5 /* anim_12.png */; };
+ 18EC47E01AD7C62F00C397E5 /* anim_13.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47CC1AD7C62F00C397E5 /* anim_13.png */; };
+ 18EC47E11AD7C62F00C397E5 /* anim_14.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47CD1AD7C62F00C397E5 /* anim_14.png */; };
+ 18EC47E21AD7C62F00C397E5 /* anim_15.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47CE1AD7C62F00C397E5 /* anim_15.png */; };
+ 18EC47E31AD7C62F00C397E5 /* anim_16.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47CF1AD7C62F00C397E5 /* anim_16.png */; };
+ 18EC47E41AD7C62F00C397E5 /* anim_17.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47D01AD7C62F00C397E5 /* anim_17.png */; };
+ 18EC47E51AD7C62F00C397E5 /* anim_18.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47D11AD7C62F00C397E5 /* anim_18.png */; };
+ 18EC47E61AD7C62F00C397E5 /* anim_19.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47D21AD7C62F00C397E5 /* anim_19.png */; };
+ 18EC47E71AD7C62F00C397E5 /* anim_20.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47D31AD7C62F00C397E5 /* anim_20.png */; };
+ 18EC47EB1AD7FE8200C397E5 /* tabbar_ favourite.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47E81AD7FE8200C397E5 /* tabbar_ favourite.png */; };
+ 18EC47EC1AD7FE8200C397E5 /* tabbar_ favourite@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47E91AD7FE8200C397E5 /* tabbar_ favourite@2x.png */; };
+ 18EC47ED1AD7FE8200C397E5 /* tabbar_ favourite@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 18EC47EA1AD7FE8200C397E5 /* tabbar_ favourite@3x.png */; };
54A0444849F1931415392FC1 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E83ED1B8EA89BC57ACF91BA5 /* libPods.a */; };
/* End PBXBuildFile section */
@@ -80,8 +130,12 @@
/* Begin PBXFileReference section */
05EB633B553B549AA5102110 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; };
- 184F48AE1A93321700C5C22F /* SecondViewControllerViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SecondViewControllerViewModel.m; path = iOSStudy/ViewModel/SecondViewControllerViewModel.m; sourceTree = ""; };
- 184F48B01A93323F00C5C22F /* SecondViewControllerViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SecondViewControllerViewModel.h; path = iOSStudy/ViewModel/SecondViewControllerViewModel.h; sourceTree = ""; };
+ 183970301B0182A00098318E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Main.strings; sourceTree = ""; };
+ 183970321B0182A60098318E /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Main.strings"; sourceTree = ""; };
+ 183970361B01A6C50098318E /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; };
+ 183970381B01A6C70098318E /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; };
+ 184F48AE1A93321700C5C22F /* WebViewControllerViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WebViewControllerViewModel.m; path = iOSStudy/ViewModel/WebViewControllerViewModel.m; sourceTree = ""; };
+ 184F48B01A93323F00C5C22F /* WebViewControllerViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebViewControllerViewModel.h; path = iOSStudy/ViewModel/WebViewControllerViewModel.h; sourceTree = ""; };
184F48B21A93340F00C5C22F /* WebBean.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebBean.h; path = Bean/webBean/WebBean.h; sourceTree = ""; };
184F48B31A93340F00C5C22F /* WebBean.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WebBean.m; path = Bean/webBean/WebBean.m; sourceTree = ""; };
185EEB491A98DC9900BFDB79 /* SettingTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingTableViewController.h; sourceTree = ""; };
@@ -89,6 +143,10 @@
185EEB4C1A98E0BA00BFDB79 /* tabbar_setting.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tabbar_setting.png; path = " Resource/images/tabbar/tabbar_setting.png"; sourceTree = ""; };
185EEB4D1A98E0BA00BFDB79 /* tabbar_setting@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "tabbar_setting@2x.png"; path = " Resource/images/tabbar/tabbar_setting@2x.png"; sourceTree = ""; };
185EEB4E1A98E0BA00BFDB79 /* tabbar_setting@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "tabbar_setting@3x.png"; path = " Resource/images/tabbar/tabbar_setting@3x.png"; sourceTree = ""; };
+ 187E96971AD6BED500D164FA /* NotificationCenterConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NotificationCenterConstants.h; path = libs/NotificationCenterConstants.h; sourceTree = ""; };
+ 187E96981AD6BED500D164FA /* NotificationCenterConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NotificationCenterConstants.m; path = libs/NotificationCenterConstants.m; sourceTree = ""; };
+ 189BC7DA1AE4ED7C0051EDCD /* UINavigationBar+Awesome.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "UINavigationBar+Awesome.h"; path = "libs/UINavigationBar+Awesome.h"; sourceTree = ""; };
+ 189BC7DB1AE4ED7C0051EDCD /* UINavigationBar+Awesome.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "UINavigationBar+Awesome.m"; path = "libs/UINavigationBar+Awesome.m"; sourceTree = ""; };
189EF8311A8399B100F19327 /* BlogBean.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlogBean.h; path = Bean/blogBean/BlogBean.h; sourceTree = ""; };
189EF8321A8399B100F19327 /* BlogBean.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BlogBean.m; path = Bean/blogBean/BlogBean.m; sourceTree = ""; };
189EF8341A839FC600F19327 /* JsonTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JsonTools.h; path = Tools/JsonTools.h; sourceTree = ""; };
@@ -99,16 +157,8 @@
18A998921A7C77D0002E7219 /* NetWorkTools.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NetWorkTools.m; path = Tools/NetWorkTools.m; sourceTree = ""; };
18AB47931A99969600E4C030 /* VideoBean.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VideoBean.h; path = Bean/videoBean/VideoBean.h; sourceTree = ""; };
18AB47941A99969600E4C030 /* VideoBean.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VideoBean.m; path = Bean/videoBean/VideoBean.m; sourceTree = ""; };
- 18AB47961A99A51200E4C030 /* BaseTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BaseTableViewCell.h; path = Base/BaseTableViewCell.h; sourceTree = ""; };
- 18AB47971A99A51200E4C030 /* BaseTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BaseTableViewCell.m; path = Base/BaseTableViewCell.m; sourceTree = ""; };
18AB47991A9C59CB00E4C030 /* UIImage+Resize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "UIImage+Resize.h"; path = "libs/UIImage+Resize.h"; sourceTree = ""; };
18AB479A1A9C59CB00E4C030 /* UIImage+Resize.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Resize.m"; path = "libs/UIImage+Resize.m"; sourceTree = ""; };
- 18AB479D1A9C5E3300E4C030 /* VideoCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VideoCell.h; path = Cell/VideoCell.h; sourceTree = ""; };
- 18AB479E1A9C5E3300E4C030 /* VideoCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VideoCell.m; path = Cell/VideoCell.m; sourceTree = ""; };
- 18AB47A31A9C82FA00E4C030 /* AddBlogTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AddBlogTableViewController.h; sourceTree = ""; };
- 18AB47A41A9C82FA00E4C030 /* AddBlogTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AddBlogTableViewController.m; sourceTree = ""; };
- 18AB47A61A9DA40500E4C030 /* DBUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DBUtils.h; path = Tools/DBUtils.h; sourceTree = ""; };
- 18AB47A71A9DA40500E4C030 /* DBUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DBUtils.m; path = Tools/DBUtils.m; sourceTree = ""; };
18AB47A91AA415A400E4C030 /* FavouriteBean.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FavouriteBean.h; path = Bean/FavouriteBean.h; sourceTree = ""; };
18AB47AA1AA415A400E4C030 /* FavouriteBean.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FavouriteBean.m; path = Bean/FavouriteBean.m; sourceTree = ""; };
18B23B1F1A7A14D000E80854 /* iOSStudy.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iOSStudy.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -116,21 +166,41 @@
18B23B241A7A14D100E80854 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
18B23B261A7A14D100E80854 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
18B23B271A7A14D100E80854 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; };
- 18B23B291A7A14D100E80854 /* FirstViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FirstViewController.h; sourceTree = ""; };
- 18B23B2A1A7A14D100E80854 /* FirstViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FirstViewController.m; sourceTree = ""; };
- 18B23B2C1A7A14D100E80854 /* SecondViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SecondViewController.h; sourceTree = ""; };
- 18B23B2D1A7A14D100E80854 /* SecondViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SecondViewController.m; sourceTree = ""; };
+ 18B23B291A7A14D100E80854 /* BlogViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BlogViewController.h; sourceTree = ""; };
+ 18B23B2A1A7A14D100E80854 /* BlogViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BlogViewController.m; sourceTree = ""; };
+ 18B23B2C1A7A14D100E80854 /* WebViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebViewController.h; sourceTree = ""; };
+ 18B23B2D1A7A14D100E80854 /* WebViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WebViewController.m; sourceTree = ""; };
18B23B301A7A14D100E80854 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
18B23B321A7A14D100E80854 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
- 18B23B351A7A14D100E80854 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; };
18B23B3B1A7A14D100E80854 /* iOSStudyTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = iOSStudyTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
18B23B401A7A14D100E80854 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
18B23B411A7A14D100E80854 /* iOSStudyTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = iOSStudyTests.m; sourceTree = ""; };
18B23B4B1A7A234800E80854 /* BaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BaseViewController.h; path = Base/BaseViewController.h; sourceTree = ""; };
18B23B4C1A7A234800E80854 /* BaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BaseViewController.m; path = Base/BaseViewController.m; sourceTree = ""; };
- 18CECC081A91ACB6005598E4 /* FirstViewControllerViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FirstViewControllerViewModel.h; path = iOSStudy/ViewModel/FirstViewControllerViewModel.h; sourceTree = ""; };
- 18CECC091A91ACB7005598E4 /* FirstViewControllerViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FirstViewControllerViewModel.m; path = iOSStudy/ViewModel/FirstViewControllerViewModel.m; sourceTree = ""; };
- 18CECC101A921272005598E4 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/LaunchScreen.strings"; sourceTree = ""; };
+ 18C845071ACCFC690053884F /* HttpVersionTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HttpVersionTools.h; path = Tools/HttpVersionTools.h; sourceTree = ""; };
+ 18C845081ACCFC690053884F /* HttpVersionTools.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HttpVersionTools.m; path = Tools/HttpVersionTools.m; sourceTree = ""; };
+ 18C8450A1ACD41C40053884F /* BlogJsonBean.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlogJsonBean.h; path = Bean/blogBean/BlogJsonBean.h; sourceTree = ""; };
+ 18C8450B1ACD41C40053884F /* BlogJsonBean.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BlogJsonBean.m; path = Bean/blogBean/BlogJsonBean.m; sourceTree = ""; };
+ 18C8450D1ACE3E580053884F /* CoreDataUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CoreDataUtils.h; path = Tools/CoreDataUtils.h; sourceTree = ""; };
+ 18C8450E1ACE3E580053884F /* CoreDataUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CoreDataUtils.m; path = Tools/CoreDataUtils.m; sourceTree = ""; };
+ 18C845101ACE4A580053884F /* WelcomeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WelcomeViewController.h; sourceTree = ""; };
+ 18C845111ACE4A580053884F /* WelcomeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WelcomeViewController.m; sourceTree = ""; };
+ 18C845131ACE56150053884F /* MainTabBarViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainTabBarViewController.h; sourceTree = ""; };
+ 18C845141ACE56150053884F /* MainTabBarViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainTabBarViewController.m; sourceTree = ""; };
+ 18CB71201AD55BFD00D72204 /* libPushSDK-1.8.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libPushSDK-1.8.3.a"; sourceTree = ""; };
+ 18CB71221AD55C0C00D72204 /* APService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APService.h; sourceTree = ""; };
+ 18CB71231AD56C2000D72204 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; };
+ 18CB71251AD56C3000D72204 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
+ 18CB71271AD56C4000D72204 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; };
+ 18CB71291AD56C6200D72204 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
+ 18CB712B1AD570B200D72204 /* PushConfig.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = PushConfig.plist; sourceTree = ""; };
+ 18CECC081A91ACB6005598E4 /* BlogViewControllerViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlogViewControllerViewModel.h; path = iOSStudy/ViewModel/BlogViewControllerViewModel.h; sourceTree = ""; };
+ 18CECC091A91ACB7005598E4 /* BlogViewControllerViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = BlogViewControllerViewModel.m; path = iOSStudy/ViewModel/BlogViewControllerViewModel.m; sourceTree = ""; };
+ 18D184801AD28D1900188C3C /* FavouriteTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FavouriteTableViewController.h; path = iOSStudy/FavouriteTableViewController.h; sourceTree = ""; };
+ 18D184811AD28D1900188C3C /* FavouriteTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FavouriteTableViewController.m; path = iOSStudy/FavouriteTableViewController.m; sourceTree = ""; };
+ 18D184831AD2904900188C3C /* FavouriteViewControllerViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FavouriteViewControllerViewModel.h; path = iOSStudy/ViewModel/FavouriteViewControllerViewModel.h; sourceTree = ""; };
+ 18D184841AD2904900188C3C /* FavouriteViewControllerViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FavouriteViewControllerViewModel.m; path = iOSStudy/ViewModel/FavouriteViewControllerViewModel.m; sourceTree = ""; };
+ 18D184861AD2E0B700188C3C /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; };
18D2010D1A95A6F400D5F095 /* icon_29.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = icon_29.png; path = " Resource/images/appicon/icon_29.png"; sourceTree = ""; };
18D2010E1A95A6F400D5F095 /* icon_40.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = icon_40.png; path = " Resource/images/appicon/icon_40.png"; sourceTree = ""; };
18D2010F1A95A6F400D5F095 /* icon_58.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = icon_58.png; path = " Resource/images/appicon/icon_58.png"; sourceTree = ""; };
@@ -149,23 +219,66 @@
18D201281A95A9D600D5F095 /* tabbar_web.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = tabbar_web.png; path = " Resource/images/tabbar/tabbar_web.png"; sourceTree = ""; };
18D201291A95A9D600D5F095 /* tabbar_web@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "tabbar_web@2x.png"; path = " Resource/images/tabbar/tabbar_web@2x.png"; sourceTree = ""; };
18D2012A1A95A9D600D5F095 /* tabbar_web@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "tabbar_web@3x.png"; path = " Resource/images/tabbar/tabbar_web@3x.png"; sourceTree = ""; };
- 18D201321A96090A00D5F095 /* app_img_640.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = app_img_640.png; path = " Resource/images/start_img/app_img_640.png"; sourceTree = ""; };
- 18D201331A96090A00D5F095 /* app_img_1136.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = app_img_1136.png; path = " Resource/images/start_img/app_img_1136.png"; sourceTree = ""; };
- 18D201341A96090A00D5F095 /* app_img_iOS8.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = app_img_iOS8.png; path = " Resource/images/start_img/app_img_iOS8.png"; sourceTree = ""; };
- 18D201381A960B6100D5F095 /* app_img_768x1024.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = app_img_768x1024.png; path = " Resource/images/start_img/app_img_768x1024.png"; sourceTree = ""; };
- 18D201391A960B6100D5F095 /* app_img_1024x768.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = app_img_1024x768.png; path = " Resource/images/start_img/app_img_1024x768.png"; sourceTree = ""; };
- 18D2013A1A960B6100D5F095 /* app_img_1536x2048.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = app_img_1536x2048.png; path = " Resource/images/start_img/app_img_1536x2048.png"; sourceTree = ""; };
- 18D2013B1A960B6100D5F095 /* app_img_2048x1536.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = app_img_2048x1536.png; path = " Resource/images/start_img/app_img_2048x1536.png"; sourceTree = ""; };
- 18D201401A96143300D5F095 /* ThirdViewControllerViewModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ThirdViewControllerViewModel.h; path = iOSStudy/ViewModel/ThirdViewControllerViewModel.h; sourceTree = ""; };
- 18D201411A96143300D5F095 /* ThirdViewControllerViewModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ThirdViewControllerViewModel.m; path = iOSStudy/ViewModel/ThirdViewControllerViewModel.m; sourceTree = "