最近老师想要给一个去中心链的IM开发几个功能,安卓端有人做,但我们实验室没人开发过IOS,老师想起我面试的时候提到过我大二做过IOS开发,就让我这个月搞出来,然后…
不愧是世界上最难用的IDE,回想起了大二被XCODE支配的恐惧
因为当时没用pods管理第三方库…以下踩坑记录
使用CocoaPod管理依赖的项目,XCode只能使用workspace编译项目,如果还只打开以前的xcodeproj文件进行开发,编译会失败。新增的workspace文件会引用原有的应用主工程,还会引用新增的Pods工程
如果 PODS生成的静态链接库没有被主工程target链接,要自己手动建立链接
在头文件搜索路径里 xxx/xxx/ re… 别忘了加\并设置迭代搜索
build后修改代码,需要build clean再重新build,不然会报上次一样的错
要检查头文件路径是否正确
,或者直接写”.h”,则xcode会直接在头文件搜索路径里搜索 mac自带的ruby权限较小,开发不要用这个。我们要自己安装rvm并创建ruby环境,随后我们的cocoapods是在这个环境使用的
respondsToSelector 用来判断某一个方法时候实现
#如果destroy这个方法实现了,就执行之 if ([subViewController respondsToSelector:@selector(destroy)]) { [subViewController destroy]; }
UINavigationController 导航控制器
开发的时候一般都是多控制器,由一个父控制器管理多个子控制器
一般都是在Appdelegate中生成(可以将Nav写在一个VC中,然后在Appdelegate中实例化这个VC)
使用方法:
初始化UINavigationController实例
在AppDelegate中设置一个根控制器,即设置
self.window.rootViewController=UINavigationController
(在AppDelegate中设置,self指的appdelegate)通过push方法添加需要的子控制器
在初始化UINavagationController的时候调用构造方法
initWithRootViewController:
就会自动push自己设定的根控制器,但其它view就要创建后手动push
当前view所属控制器
self.navigationController
控制器跳转:
[self.navigationController pushViewController:xxxViewController animated:YES]
压入(push)控制器:
-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
移除(pop)栈顶控制器:
-(UIViewController *)popViewControllerAnimated:(BOOL)animated;
即可返回上一层控制器回到(popTo)指定子控制器:
-(NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
回到根(popToRoot)控制器(栈底):
-(NSArray *)popToRootViewControllerAnimated:(BOOL)Animated;
一次压入多个控制器
setViewController
栈顶控制器
nav.topViewController
当前可见视图控制器
nav.visibleViewController
ViewController相关
根据名字获取VC:
_homeViewController = self.viewControllers[TABBAR_HOME_INDEX];
账户登入状态等信息可以用单例模式来管理
AppDelegate负责管理程序周期,是程序入口
如
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
这里就是程序launch完后做的事情,这时候就可以初始化Root VC了
协议 接口 委托
委托:A委托B去做某事,B如果没有这个方法,B从C继承,C有这个方法,就会执行C中的该方法(与java一样的向上转型)
- A是B的委托对象
- B引用一个A
- A将实现B的委托方法
- B通过委托方法通知
接口:接口就相当于一个头文件,告诉外部可以用,联想生物细胞的构造
在h文件里写@interfacae,在m文件里实现该interface,就相当于建立了一个类,只有interface暴露的东西才能被外部使用,这种设计是为了更好的安全性
java类和oc类的核心区别在于,java类的共有私用是由类里面自己实现的,可以设置共私有变量和方法,而OC中每个类都是由一个接口interface和实现该interface的类来完成,只有interface中的东西暴露给了外部
协议:协议可以类比java中的interface
Universal Link
, 中文是通用链接. 可以通过http(s)
来唤醒App
prepareForSegue:sender:
为了区分视图的跳转,可以用上一个、下一个来表示,也可以用源视图、目标视图来表示。 即: sourceViewController 和destinationViewController。 目标视图控制器是指:即将显示(加载)的视图, 而源视图控制器是指:即将被取代的视图控制器。
跳转总结