MVC设计模式
设计模式:前人总结的经验、方法和工具
委托、观察者、单例 工厂
Model-View-Controller 模型-视图-控制器
在iOS开发中应用较为广泛的设计模式
Model 模型 处理数据或者处理业务逻辑
View 视图 程序与用户交互的界面,用户可以看到它的存在
Controller 控制器 处理用户交互的 负责视图和模型之间的数据及请示的传递
Controller-View Controller-Model
View跟Model之间没有直接的操作
View:webView
Model:request sina
controller:ViewCtroller
用户点击了View View将用户操作传递给了控制器、控制器让Model更新、Model操作过之后 通知控制器我搞定了 控制器去刷新UI
区别于DAO设计模式 DAO其实只是相当于MVC中Model的功能
授权
access_token
TimeLineViewController 公共微博
M:ZYSinaEngine 负责跟新浪相关、请求模块
V:ZYLoginWebView 负责展示授权界面 以供用户交互
C:ZYTimeLineViewController 负责管理V以及V上数据的展示 V和M之间的数据以及请求的传递
类与类/(对象与对象)之间交互:1、通知 2、代理(协议) 3、property:需创建对象
按照MVC来设计代码
新建ZYLoginWebView继承于UIView
在ZYLoginWebView.h中添加webView属性
在ZYLoginWebView的初始化方法中 创建初始化webView 并添加
设置代理 导入协议 实现两个协议方法
重写layoutSubviews方法 方法中设置webView的frame
让webView加载请求 请求归M管 新建Model类ZYSinaEngine
在ZYSinaEngine类中添加加号方法(方便)authorizeReuqest返回一个请求
authorizeReuqest方法实现时 需要很多新浪创建的应用的参数 而且参数会多次用到 所以宏定义在ZYSinaEngine中
在ZYLoginWebView.h中定义 ****- (void)loadAuthorizeRequest:(NSURLRequest *)request;
在TimeLineViewController中 创建并初始化ZYLoginWebView 然后 加载请求
在webView代理方法中接收code
接收到code后 需要告诉TimeLineViewController 使用协议
因为是ZYLoginWebView想给别人传信息 所以在ZYLoginWebView中应该有一个委托对象属性id<协议名> delegate
在ZYLoginWebView中写协议方法 并且在.m中调用协议方法
NSError的构成
TimeLineViewController实现代理方法 拿到code
在ZYSinaEngine中 声明一个实例方法 根据code请求accesstoken
拿到token后 告诉Controller拿到accesstoken 使用协议
因为是ZYSinaEngine想给别人传信息 所以在ZYSinaEngine中应该有一个委托对象属性 id<协议名> delegate
在ZYSinaEngine中写协议方法 并且在.m中使用代理对象调用协议方法 因为协议方法为可选方法 所以应加判断 代理对象是否存在且是否可以相应代理方法
TimeLineViewController实现代理方法 拿到access_token
在ZYSinaEngine中 声明一个实例方法 根据accesstoken请求公共微博数据
拿到数据后 解析 告诉Controller拿到数据 使用协议 可以使用ZYSinaEngineDelegate