IOS开发笔记

此贴会经常更新添加新内容,敬请关注!      

首先给出IOS开发常用开源代码和第三方库:http://www.cocoachina.com/applenews/devnews/2013/0128/5622.html

视频分享:
http://www.lanrenios.com/tutorials/basic/2012/1218/630.html
http://www.lanrenios.com/tutorials/basic/2013/0121/806.html

这是一个大神的博客,可以多多学习:http://geeklu.com/

修改appid 信息:appleid.apple.com
苹果开发者支持中心:40067108551

1、获取info.plist文件内容,名称/版本号......
NSDictionary *progectInfo = [[NSBundlemainBundle]infoDictionary];  
NSString *idst = [progectInfo objectForKey:@"CFBundleIdentifier"];      // 获取应用标识
Dlog(@"%@", idst);

2、NSLog宏定义
#ifdef DEBUG
#define Dlog(format, ...) NSLog(format, ##__VA_ARGS__)
#else
#define Dlog(format, ...)
#endif

3、UIImageView之上的UIButton默认是不触发事件的,加入一行代码搞定:
UIImageView *bgView = [[UIImageViewalloc]initWithImage:[[UIImageimageNamed:@"sdf"]autorelease]];
bgView.userInteractionEnabled =YES;

4、设置视图不支持横屏显示,修改info-plist文件,直接上图:

5、相册照片选中后可以编辑大小/移动位置,修改选择器:
imagePicker.allowsEditing = YES; 接着在代理方法中这样获得修改后的照片: UIImage *editedImage = [infoobjectForKey:UIImagePickerControllerEditedImage];

6、当我们的应用需要支持中文国际化时,比如打开相册,菜单都是中文的.可以在PROJECT下添加,添加中文支持后infoPlist.strings会自动添加一个中文的空文件,直接上图:


7、(1)显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles YES
           隐藏Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles NO
           操作完之后要强制退出Finder并从新启动。
     (2)MAX删除文件夹下的所有.svn文件
       打开终端应用;将准备删除的文件夹拖拽到终端,得到该文件夹的绝对路径;
       cd  刚才得到的路径,进入该文件夹;
       执行  rm -rf `find . -type d -name .svn` 命令;
       注意这个符号 : “  `  ” ,在mac下先按 fn 键 再按 esc 下面的哪个键; 或则直接拷贝上面的命令

8、程序停止/间隔执行:

     (1) sleep(300);
   (2)(1)
[NSThread sleepForTimeInterval:5.0];

    (3)[selfperformSelector:@selector(startupview)withObject:nilafterDelay:3];

9、隐藏iPhone通知栏
     (1)
application.statusBarHidden = YES;
     (2)可以修改info.plist文件:
10、标签栏默认高度是48宽度152(四个菜单时),TabBarItem的图片尺寸是30X30,这个应该是带字的,不带字@2x应该是44比较好看,导航栏 / UISegmentedControl / 工具栏 / uitableviewcell的默认高度都是44,状态栏默认高度是20.

11、UINavigationController和UITabBarController都是容器控制器,别打算给他们或他们的子类直接添加标题等操作。

12、导航栏在不同的视图控制器中隐藏和出现时会有黑色的条闪现,解决方法:[self.navigationControllersetNavigationBarHidden:YESanimated:YES]; 不要用传统的这个属性设置self.navigationController.navigationBarHidden = YES。

13、今天遇到一个很有趣的问题,花费了近一个小时才搞定。当我们用UINavigationController压入普通视图控制器显示UIWebView时,网页由于UINavigationBar的高度无法通过滑动完全显示,意思就是当我把页面滑动到最低部网页还是不能完全显示,问题就出在导航栏的高度影响了。解决方案很怪异,我设置了UIWebView的高度减去导航栏高度就ok了,代码如下:
CGRect rect = [UIScreenmainScreen].bounds
_uiWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0,0, rect.size.width, rect.size.height-60)];
14、AudioServicesPlaySystemSound(1013);  调用系统铃声。(1013只是其中一个声音)
 AudioServicesPlaySystemSound (kSystemSoundID_Vibrate);  调用系统震动

15、Unbalanced calls to begin/end appearance transitions for......这种错误是某个视图在切换时,动画没有结束又有新的动画即将开始,所以就出问题了,解决办法之一是去掉动画。比如[self.navigationControllerpushViewController:zbarReaderanimated:NO]; 不用YES;

16、UILabel和UITextField,UITextView区别

UILabel 显示的文本只读,无法编辑,可以根据文字个数自动换行;

UITextField 可编辑本文,但是无法换行,只能在一行显示;当点击键盘上的return时会收到一个事件做一些事情

UITextView 可编辑文本,提供换行功能。textView.layer.cornerRadius =10;       //设置圆角
其实这些控键是否可编辑,自己可以手动设置。

17、 ios编辑框隐藏键盘
(1)点击编辑区域外隐藏键盘

    UITapGestureRecognizer *tapGr = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(dismissKeyBoard)];

    tapGr.cancelsTouchesInView =NO;

    [self.navigationController.navigationBaraddGestureRecognizer:tapGr];

(2)键盘上面添加隐藏按钮

    UIToolbar * topView = [[UIToolbaralloc]initWithFrame:CGRectMake(0,0,320,30)];

    [topView setBarStyle:UIBarStyleBlackTranslucent];    

    UIBarButtonItem * doneButton = [[UIBarButtonItemalloc]initWithTitle:@"隐藏键盘" style:UIBarButtonItemStylePlain target:self action:@selector(dismissKeyBoard)];

    NSArray * buttonsArray = [NSArrayarrayWithObjects:doneButton,nil];    

    [topView setItems:buttonsArray];

    [textViewsetInputAccessoryView:topView]; 

18、当需要一次创建很多个UILabel或者其他控键,如果他们的坐标是有规律可循,就用循环创建。目前苹果没有提供一次创建多个属性相同标题不同的控键。

19、iOS开发之去除icon图标特效,阴影、反光
      添加一个Icon already includes gloss effects并选择yes,然后icon位置Prerendered搭钩如下图:

20、当UITextField的内容左对齐时太靠近左边怎么办?我们可以利用分类机制重写UITextField的自带方法:

新建文件名字叫UITextFieldCategory.h / .m共两个文件

.h内容如下:
@interface
UITextField (textMath)

- (CGRect)editingRectForBounds:(CGRect)bounds;

- (CGRect)textRectForBounds:(CGRect)bounds;

@end
.m内容如下:

#import "UITextFieldCategory.h"

@implementation UITextField (textMath)

// 利用分类重写UITextField的内容布局方法

- (CGRect)editingRectForBounds:(CGRect)bounds

{

    returnCGRectMake(bounds.origin.x +10.0f, bounds.origin.y, bounds.size.width, bounds.size.height);

}

- (CGRect)textRectForBounds:(CGRect)bounds

{

  returnCGRectMake(bounds.origin.x +10.0f, bounds.origin.y, bounds.size.width, bounds.size.height);

}

@end

21、刷新、提示、进度条实现,有第三方库非常方便MBProgressHUD,可以在github上下载,地址:https://github.com/jdg/MBProgressHUD


22、发送邮件功能可以使用SKPSMTPMessage第三方库,注册一个gmail帐号就可以直接发送邮件到你制定的邮箱(qq邮箱),需要倒入<CFNetwork/CFNetwork.h>框架。

23、给iphone模拟器相册保存图片
    向ios模拟器里添加图片的方法不止一种,这里介绍最简单的:
    打开模拟器后,用电脑的 Safari 浏览网页,将需要的图片拖到 iPhone 模拟器,模拟器就会自动打开 Safari 浏览到这张图片了。
    此时长按图片,在弹出的对话框里选择保存就搞定了。

24、设置navigationtablebar的barButtonItem颜色
    self.navigationController.navigationBar.tintColor = [UIColorcolorWithRed:104/255green:189/255.0blue:227/255.0alpha:1];

25、创建手势之后,在执行了手势选择器后记得移出手势,特别是这个手势添加到一个其他控制器也使用到的对象上:
tapGr = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(dismissKeyBoard)];
[self.navigationController.navigationBarremoveGestureRecognizer:tapGr];

26、应用添加评论打分,直接进入appstore评分页面链接(只要更换id就可以了):itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=331351772

27、点击home键,让程序再次点击时重新打开程序。在Information Property List下找到“Application does not run in background”属性,然后将这个值设置成YES。

28、ios应用右上角添加小红圈,如果值为0则去除红圆圈。[UIApplicationsharedApplication].applicationIconBadgeNumber = 2;

29、多线程注意事项:
      (1)UI创建和操作都在主线程执行。
      (2)非主线程主要执行耗时的大数据处理,或者是网络加载过程。
      (3)每个线程的内存管理都由开辟内存的线程管理。
      (4)次线程最好用自动内存管理池管理内存。

30、sendSynchronousRequest同步请求时,如果使用post传递参数,后台用java接收参数,必须在客户端设置参数类型:
[request setValue:@"text/xml"forHTTPHeaderField:@"Content-Type"]; 如果忘记这句代码,后台是无法获取参数值的。

31、 XCode中文乱码

在Mac下用普通的文本编辑器(或者用word从新保存)打开源文件,全文复制粘贴回XCode 。粘贴时提示有不可表示字符,选择重新保存成UTF-8即可。

32、部分文件设置或者取消arc机制:选中Targets--> 选择 Build Phases --> 展开Compile Sources  , 我们看到第二列的名称为:Compiler Flags 双击你所要使用ARC的文件,并输入 -fobjc-arc 即可添加arc,如果想让使用ARC机制的代码不使用ARC机制,只需要输入 -fno-objc-arc

33、CATransition移动视图或者淡入淡出效果经常对UIImageView或其他视图不其作用,此时就添加一层UIView视图,动画加到UIView上,UIImageView加到这个UIView上就OK了。

34、linker command failed with exit code 1 (use -v to see invocation),这种错误一般由两种原因造成:
(1)Target-->Build Phases-->compile Sources中缺少了某个.m文件,点击+号导入进来就可以了。
(2)Target-->Build Phases-->compile Sources中重复添加了多个相同的.m文件,删掉多余的就可以了。

35、当switch case的分支中定义了变量,就必须加大括号,否则语法错误。

36、xcode5基于iOS5.0而不是iOS7开发的话,添加百度地图SDK时报错,有个地方需要注意

37、UITextField最开始获得的textField.text时,不是@"",而是nil。被这问题搞了很长时间,郁闷啊。

38、objective-c内存管理(iOS内存管理)
(1) IOS对象一直都在堆上(重点啊)。
(2) 方法的参数识别:带*星号的,是类指针变量,内容在堆上,不带星号的是普通局部变量在栈上。
(3) ARC中默认的指针类型就是strong。
(4) 在默认情况下,所有的实例变量(对象)和局部变量(对象)都是strong类型的。
(5) 只要某个对象被任一strong指针指向,那么它将不会被销毁。如果对象没有被任何strong指针指向,那么就将被销毁。
(6) 在ARC机制作用下,当某个对象被销毁后,所有指向这个对象的weak指针将被置为nil,weak指针没有实际指向对象。
(7) 相信无数的开发者都曾经被指针指向已释放对象所造成的EXC_BAD_ACCESS困扰过,使用ARC以后,不论是strong还是weak类型的指针,都不再会指向一个dealloced的对象,从根源上解决了意外释放导致的crash。
(8) NSString *str0 = @"abc"; 和NSString *str1 = @"abc"; 都在静态存储区存储,此时的str0和str1指针比较是相等的。

39、UIlabel自动换行,uilabel换行设置
//自动折行设置  

  1.     label.lineBreakMode = UILineBreakModeWordWrap;  
  2.     label.numberOfLines = 0;

40、 iOS系统默认可以向程序中增加最多64个本地通知,本地通知目前只能按照时分秒、年月日提示,如果想按每两天提醒一次,就麻烦了。要判断机器是不是支持本地通知,然后在为每一个通知指定一个标识,取消时会用。

41、有时应用在启动时就会闪退,请查看你的以下方法中是否添加了耗时操作,比如网络请求。

  • application:didFinishLaunchingWithOptions:
  • applicationWillResignActive:
  • applicationDidEnterBackground:
  • applicationWillEnterForeground:
  • applicationDidBecomeActive:
  • applicationWillTerminate:

上面所有这些方法,应用只有有限的时间去完成处理。如果花费时间太长,操作系统将终止应用。

42、推荐一个xcode控件KSImageNamed,KSImageNamed是一款方便填写图片文件名称的插件。支持NSImage和UIImage,当你写到[UIImage imaged:的时候,插件会把项目中的图片名称提示出来,并且还有预览功能,对经常用代码生成图片视图的童鞋十分方便。此控件使用很方便,只要打开所下载的工程然后编译通过,再退出重新打开XCODE就可以了。
下载地址:https://github.com/ksuther/KSImageNamed-Xcode

43、 修改navigationBar背景色和title颜色

    [userCenterNC.navigationBarsetBackgroundImage:[ToolimageWithColor:UIBUTTON_BGCORLOR]forBarMetrics:UIBarMetricsDefault];

    userCenterNC.navigationBar.titleTextAttributes = [NSDictionarydictionaryWithObject:[UIColorwhiteColor]forKey:UITextAttributeTextColor];

    //navigationBar返回颜色

    userCenterNC.navigationBar.tintColor = [UIColorwhiteColor];

44、修改状态栏为白色,在info.plist文件中添加两个属性
View controller-based status bar appearance    NO

[application setStatusBarStyle:UIStatusBarStyleLightContent]; (此代码加在AppDelegate中)

45、XCODE在Macbook Pro下触摸板左右滑动不能切换界面,这个问题搞了一个钟头,所以记录一下:方法是在打开电脑的系统偏好设置——>触控板——>更多手势,选中第一项“在页面之间轻扫”并且给“两个手指左右滚动”打钩。好了这样就解决了,上图会看的更清晰。


46、XCODE开发时有个插件可以自动填充注释VVDocumenter-Xcode,使用方法先去github下载工程,接着编译成功后~/Library/Application Support/Developer/Shared/Xcode这个目录中多了一个Contents文件,里面会有个Info.plist配置文件。这时重新启动XCODE就可以使用自动注释了,在方法前输入///三个斜杠就可以了。
下载地址:https://github.com/onevcat/VVDocumenter-Xcode

47、iOS开发中有可能在程序打包前初始化很多数据,比如题库资料。上次同事给我整理了一份txt文档,里面存储的是大量的json数组,文件有3M左右,我刚开始用

[NSArray arrayWithContentsOfFile:path]读取内容,每次都返回nil,后来先给数组加了一个"key",先获取data数据,然后转成字典。data已经有数据了,但是字典还是nil。让我很郁闷,后来我看到xcode中显示的txt中文有乱码,感觉跟编码方式有关系,所以在MAC上先打开txt复制所有内容,然后粘贴到xcode,这是xcode会提示你保存的utf-8格式,点击确定,再次粘贴一下。发现xcode看到的txt都是中文。然后解析字典数据终于出来了,我内个去啊。

48、关于autolayout在故事板的应用


49、Schema->Run->Diagnostics 里面选中 EnableAddress Sanitizer 这个选项打钩太恐怖了。
今天使用
MKMapView,一打开地图内存就持续暴涨,然后上到600M左右就闪退,浪费一天时间没找出问题,最后在XCODE中把上面的勾去掉,一切就好了。

<span style="font-family: arial; line-height: 20.02px; background-color: rgb(255, 255, 255);">50、storyboard故事板使用UIScroller注意事项,</span><span style="font-family: Verdana, sans-serif, 宋体; font-size: 12.5px; letter-spacing: 0.5px; line-height: 22.5px; background-color: rgb(255, 255, 255);">在StoryBoard中使用UIScrollView一定要用下图中的这种布局,如果刚开始没想到用UIScrollView后来才想加,可以选中所有Subview然后选择Editor - Embed in - Scroll View,ContentView忘加了也可以类似操作。</span>

如果scrollerView的高度超过屏幕高度,还想要添加控件时,设置Intrinsic Size 为 Placeholder,这样storyboard会给你展示临时的高度,运行时不会以这个高度为准,或者设置viewcontroller的Simulated Size属性为Freeform值,运行时改回fixed就可以了。ScrollView上面的空间都要设置上下左右和宽高,除非是imageview设置了图片会有默认大小不需要约束宽高。布局时必须让UIScrollView知道其contentSize大小,而不是一个不确定的值,这样才算完成UIScrollView布局,不然会有类似这样的警告:has ambiguous scrollable content height。

51、NSUserDefaults只能保存系统自带对象,比如字典、字符串、数组等。并且不能有null值,否则会报错Attempt to set a non-property-list object。

52、苹果推送证书跟bundle id是一一对应的。

53、如果一个xib要装载多个cell,记得在cell.h文件反过来再划线到xib一次,不然经常系统会错乱cell.h中的属性是属于xib中那个cell的。

54、想要headerView伴随着cell一起向上滑动,也就是viewForHeaderInSection这个view。有两种方式可以解决:
      (1)在当前控制器中重写
scrollViewDidScroll,这个方式在有下拉刷新和加载分页时有些小问题。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView == self.tv)
    {
        CGFloat sectionHeaderHeight = tvHeadViewHeight;
        if (scrollView.contentOffset.y<=sectionHeaderHeight&&scrollView.contentOffset.y>=0) {
            scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
        } else if (scrollView.contentOffset.y>=sectionHeaderHeight) {
            scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);
        }
    }
}
    (2)设置tableView的style为 UITableViewStyleGrouped,并且执行代理方法 heightForFooterInSection返回0.01,取消没用的footer行。推荐第二种方法实现。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值