iOS 开发笔记

1,Search Bar 怎么着去掉背景的水彩(storyboard里只好设置background颜色,然而发现clear Color不能够利用)

2,NSDate使用

3,UTTabviewCell 未实例化

4,StoryBoard中segue的使用

5,nil和Nil和NULL的判断

6,给uiview设置圆角体制

7,隐藏键盘的两种方法

8,UIText菲尔德(Field)密文显示输入内容

9,通过系统自带的NSPredicate使用正则表明式

10,项目设置应用程序展现名称

11,更改Xcode的缺省公司名

12,在有uinavigation,uitoolbar的气象下,怎么样添加一个全屏的 uiview (作为显示一个速度框,任何区域不可以触摸而使用)

13,使用了storyboard,运行程序模拟器彰显黑屏

14,如何给uiNavigationBar 设置背景颜色或是自定义图片

15,怎么样给uiview设置背景图片

16,怎样在档次用代码打开AppStore

17,怎么样代码完毕跳转safari,phone或message?

18,注册安装应用程序访问用户手机发送推送音信(弹出Alertview)

19,轻松自定义复选框按钮

20,程序中赢得软件的版本号和app名称、

21,怎么着使显示屏向来维系唤醒状态?(就是不自动黑屏)

22,在Xcode中,文件名后小方框中的A(M或C)表示什么意思啊?

23,有关ios5上显示器旋转,view设置Frame的相关题材

24,Xcode编译警告和不当解决办法

25,如何设置视图(view)在最上层?或是view1和view2交流?

26,怎么样隐藏UINavigationBar

27,怎么样限制UIText菲尔德(Field)输入长度(监听textField文本变化的风浪)

28,使用ios5.0自此的一个艺术自定义table View Cell

29,iOS和华为平板各app图标和开行页尺寸

30,如何用NSLog输出NSRange,CGRect等结构体

31,怎么样在navigationviewcontroller中,pop到事先分化的viewcontroller(push过的viewcontroller)?

32,self.navigationItem.backBarButtonItem 的title设置

33,self.navigationItem和self.navigationController.navigationItem的区别?

34,图片模糊化处理

35,NSString转换大小写的用法

36,如何得到手机硬件音讯?

37,真机调试:could not change executable permissions错误?

38,判断iphone5显示器的宏定义

39,invalid deployment target for -stdlib=libc++ (requires iOS 5.0 or later)错误

40,怎么样调用系统声音?【iphone 调用系统铃声与震撼功效】

41,重复调用2次loadView和viewDidLoad

42,点击UIButton 不能暴发触摸事件

43,怎么着启动app时全屏显示Default.png(图片)?

44,使用ASIHTTPRequest保存cookies

45,UIText菲尔德唯有当有字符输入后,键盘右下角的摸索/重回/done/等等键才足以利用

46,类似QQ等IM软件,长度和可观不等的闲话气泡的图纸是哪些做的?拉伸?

47,UITableView中有三个UIText菲尔德时,被挡住的Text菲尔德(Field)怎么样贯彻全自动进化弹起?

48,ios怎么着在调试时,轻松找到程序在哪儿崩溃?

49,UIImageView 如何完结windows 桌面类似的背景壁纸屏幕(很小的图形会突显N五个)?

50,UITableViewCell 的backgroundColor不起效率的问题?

51,UITableViewCell选中时contentView中各组件的高亮状态

52,IOS atomic与nonatomic,assign,copy与retain的概念和界别

53,#pragma mark -#pragma mark Initialization含义

54,自定义delegate变量声明时行使assign仍然retain?

55,给成员变量(属性)赋值时使不接纳self?

56,怎样给UIbutton 同时安装图片(Image)和文字(Title)以及它们的各个场馆?

57,怎样将NSDate类型转化为离开1970/1/1的微秒差?

58,ios中的全局静态变量

59,怎样接纳 NSNotificationCenter 在viewcontroller之间进行传值?

60,Thread EXC_BAD_ACCESS : objc_retain, objc_getProperty 崩溃错误

61,MAC 终端(bash)svn命令不识别 command not found

62,ios MapKit  判断坐标是不是在MapView显示范围内

63,简单的冒泡排序法

1,Search Bar 怎么样去掉背景的颜料(storyboard里只好设置background颜色,可是发现clear Color不能运用)

其实在代码里仍然足以设置的,这就是删除背景view

[[self.searchBar.subviews objectAtIndex:0] removeFromSuperview];

 

 

2,NSDate使用

[java] view
plain
copy图片 1图片 2

 

  1. 字母  日期或时刻元素    表示     示例       
  2. G     Era   标志符     Text     AD       
  3. y     年     Year     1996 96       
  4. M     年中的月份     Month     July;   Jul; 07       
  5. w     年中的周数     Number     27       
  6. W     月份中的周数        Number     2       
  7. D     年中的天数     Number     189       
  8. d     月份中的天数        Number        10       
  9. F     月份中的星期     Number        2       
  10. E     星期中的天数    Text     Tuesday;   Tue       
  11. a     Am/pm   标记        Text     PM       
  12. H     一天中的时辰数(0-23)     Number       0       
  13. k     一天中的时辰数(1-24)      Number     24       
  14. K     am/pm   中的时辰数(0-11)     Number    0       
  15. h     am/pm   中的小时数(1-12)     Number    12       
  16. m     小时中的分钟数        Number     30       
  17. s     分钟中的秒数         Number     55       
  18. S     毫秒数         Number     978       
  19. z     时区     General   time   zone     Pacific   Standard   Time;   PST;   GMT-08:00       
  20. Z     时区     RFC   822   time   zone     -0800       

 

 

[注意]在支付中,倘若选取年月日,用NSDateFormatter setFormat
:@”yyyy-MM-dd”,尽管是行使时辰和分钟,设置为:”HH:mm”,切记不要设置“HH-mm”,那样会出错的。

 

举例:

 

[java] view
plain
copy图片 3图片 4

 

  1. //创造一个时刻对象  
  2.     NSData * date = [NSDate date];  
  3.     //打印时间  
  4.     NSLog(@”today is %@”,date);  
  5.       
  6.     //再赢得的日子date减去24钟头的光阴(今天的那个时候)  
  7.     NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-(24*60*60)];  
  8.     NSLog(@”yesterday is %@”,yesterday);//打印今日的年月  
  9.       
  10.     /*字符串换成时间*/   
  11.     //设置一个字符串的时日  
  12.     NSString *datestring = [NSString stringWithFormat:@”1999-09-03″];   
  13.     //想要设置自己想要的格式,可以用nsdateformatter那些类,那里是开首化  
  14.     NSDateFormatter * dm = [[NSDateFormatter alloc]init];   
  15.     //指定输出的格式   那里格式必须是和上边定义字符串的格式相同,否则输出空  
  16.     [dm setDateFormat:@”yyyy-MM-dd”];  
  17.     //把字符串的时刻更换成Date对象,用dateFromString方法  
  18.     NSDate * newdate = [dm dateFromString:datestring];  
  19.     //输出  
  20.     NSLog(@”newdate is %@”,newdate);  
  21.       
  22.       
  23.     /*把日子转换成字符串*/  
  24.     //把Date对象转换成String对象  用stringFromDate方法  
  25.     NSString * datestring2 = [dm stringFromDate:newdate];  
  26.     //打印  
  27.     NSLog(@”datestring2 is %@”,datestring2);  

 

 

3,UTTabviewCell 未实例化

如若选取 UTTabviewCell,设置其accessory样式为:Detail Disclosure
,就是在每一个cell左侧安装一个detail
button。如果如此的操作是使用storyboard,进行的,它会要求您给每一个您cell设置indentifier,然后你会在以下措施内安装重用indentfier,别忘记加上一句话,否则编译运行时或者会弹出:
cell未实例化

图片 5

 

4,StoryBoard中segue的使用

在付出项目中,有时有那样的急需:运行程序,登陆界面是一个无限制的ViewController,只是安放多少个Text菲尔德(Field)和button,点击后跳转到此外选取界面,点击拔取后进入我们的主界面:那些时候,在登陆界面作跳转时,会有诸多的不二法门,若是选取storyboard,就相比便于了,设置一个segue,跳转代码中

[self PerformSegueWithIdentifier:@”targetViewController”,self];
就足以了,但是我想实例化想要跳转的控制器,然后设置某一性质的值,这样跳转后控制器获取那么些属性,就会收获值了,不过这样做会有一个题材:

主界面控制器假若选用了navigatorViewController,并且是其RootViewController,等到在主界面设置作用,点击某一效果,想push到一个新页面时,问题就来了,你会发觉毫无反应,没有报错,只是segue不可以跳转。后来到底找到原因:就是自个儿在登陆控制器跳转风尚未选取segue的格局,而是用代码self.storyboard,加载一个新类,具体原理近期还并未搞精晓,先把出题目标代码记录下来,回头补之:

图片 6

代码这样做,会促成其后不可能采用navigatorViewController做push跳转

 

 

5,nil和Nil和NULL的判断

支付进度中,大家经过http请求,后台重回json数据,而有时数据里某一字段的值为null~,然后大家把此值赋值给NSArray,NSdictionary,或是NSString,然后大家会咬定此值为null时,所做的处理,而平常惯性思维判断时大家都会写:if(dict
== nil)或是if(dict == Nil)或是if(dict == NULL)再或者if(dict isEqual
nil),大家发现,都不佳用,根本没有起到判断的功能~后来我才意识,原来不可能那样来判断。

简言之点说,就是当字典,数组为null时,后台打印的出口结果是这么:

图片 7

然后,大家要求在代码判断时采纳[NSNull null]来判断,具体如:

图片 8

isEqual:[NSNull null] 就搞定了,nsarray也是同一的道理。

 

控制台打印:str=(null) 代表着
字符串或数组或字典是一个空指针,(而非空字符串)判断的时候,直接用:

if(str == nil)就可以了。如下图所示:

图片 9

 

而控制台打印:str =
 <null>,代表着这是一个空字符串,赋值为空,指针是存在的,只是内容为空,那种判断必要选用:

if(str is equal [NSNull null ])
,因为在ios上,内容为空不可以简单的判断str==null(null 在ios上得用[NSNull
null])

图片 10

相似那种场地是,服务器那边是null,直接再次来到@”null”的字符串,这样在ios那边倒霉判断,最好跟后台沟通,假若遭受null值,重临@””,好做判定

 

 

 

 

 

6,给uiview设置圆角样式

只需在加载时,添加这样的话就能够了:

testView.layer.cornerRadius = 6;
        testView.layer.masksToBounds = YES;

留意,需求 import <QuartzCore/QuartzCore.h>
导入,否则,无法识别cornerRadius和masksToBounds。

 

uiview设置背景图片:

 [theMainView setBackgroundColor: [UIColor colorWithPatternImage:
[UIImage imageNamed: @”bg.png”]]];

 

imageName 缓存,下边方法不缓存

NSString *thePath = [[NSBundle mainBundle] pathForResource:@"default" ofType:@"jpeg"]; UIImage *prodImg = [[UIImage alloc] initWithContentsOfFile:thePath"];  controller.productImg.image = prodImg;   [prodImg release];

7,隐藏键盘的两种方法

1-1Did End On Exit 调用下面事件当点击键盘return得时候就会隐藏键盘- (IBAction)textFieldShouldReturn:(UITextField *)textField {    //[sender resignFirstResponder];    if (textField == chi) {        [chi resignFirstResponder];        double m=[chi.textdoubleValue]/3.003;        double f=m *3.2808;        meter.text=[[NSStringalloc] initWithFormat:@"%.4f",m];        feet.text=[[NSStringalloc] initWithFormat:@"%.4f",f];    }    if (textField == meter) {        [meter resignFirstResponder];            }    if (textField == feet) {        [feet resignFirstResponder];    }}1-2 点击屏幕得时候隐藏键盘-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{    UITouch *touch=[[event allTouches] anyObject];    if (touch.tapCount >=1) {        [chi resignFirstResponder];        [meter resignFirstResponder];        [feet resignFirstResponder];    }}

1-2的方法相当于屏幕任何位置的点击事件(除了各组件的点击处)可以在这个方法里执行要隐藏或remove的view。

 

8,UIText菲尔德密文显示输入内容

图片 11

只须要在Text菲尔德属性中的Secure(安全的)勾选上就足以了。彰显apple默许的密文突显情势。

 

9,通过系统自带的NSPredicate使用正则表明式

 

[java] view
plain
copy图片 12图片 13

 

  1. NSString *regex =[NSString stringWithFormat:@”^1(3[4-9]|5[012789]|8[2378]|47)\\d{8}$”];  
  2. NSPredicate *predicate = [NSPredicate predicateWithFormat:@”SELF MATCHES %@”,regex];  
  3. BOOL isMatch = [predicate evaluateWithObject:editPhoneField.text];  

 

10,项目安装应用程序彰显名称

     1,在类型的Supporting
Files下寻找infoPlist.strings文件,打开后会看到一片空白(英文默许是跟随项目名称展现)。此时,可以就地添加一句代码:CFBundleDisplayName=”爱贝通”;

   
 那样的话,无论手机安装英文语言依然中文语言,应用程序都会显示设置的称呼。

   
 2,为了国际化而言,大家最好创立一个chinese专有的infoPlist.strings文件。

图片 14

如上图所示,添加一个国语的plist

然后打开添加代码:

图片 15

以此时候,旗开得胜。安排在模拟器或真机中呢,你的手机安装(中/英)文语言,它就会调用相应的布署文件。

 

11,更改Xcode的缺省集团名

        

[java] view
plain
copy图片 16图片 17

 

  1. //  testAppDelegate.m    
  2. //  test    
  3. //    
  4. //  Created by gaohf on 11-5-24.    
  5. //  Copyright 2011 __MyCompanyName__. All rights reserved.  

        在顶峰中进行以下命令:

 

        

[java] view
plain
copy图片 18图片 19

 

  1. defaults write com.apple.Xcode PBXCustomTemplateMacroDefinitions ‘{“ORGANIZATIONNAME” = “COMPANY”;}’   

         

[java] view
plain
copy图片 20图片 21

 

  1. //    
  2. //  testAppDelegate.m    
  3. //  test    
  4. //    
  5. //  Created by gaohf on 11-5-24.    
  6. //  Copyright 2011 COMPANY. All rights reserved.    
  7. //    

 

 

 

12,在有uinavigation,uitoolbar的情事下,怎么样添加一个全屏的 uiview (作为展现一个进程框,任何区域无法触摸而使用)

            只需求在要添加view时侯那样写:

[java] view
plain
copy图片 22图片 23

 

  1. [[UIApplication sharedApplication].keyWindow addSubview:waitingview];  

 

 

       
那样,直接把waitingview添加到了uiWindow上,而不是self.view上。再一次运行,会发觉屏幕全体区域都曾经遮挡住了。

        

13,使用了storyboard,运行程序模拟器彰显黑屏

那是出于,操作不当,获取点击了例如  navigationViewController属性种的in
init
ViewController选项,然后重置了当下进入程序后的首界面,解决办法就是选拔入口界面,属性种重新勾选此选项。

 

StoryboardApp[8593:207] Failed to instantiate the default view
controller for UIMainStoryboardFile ‘MainStoryboard’ – perhaps the
designated entry point is not set?

StoryBoard中绝非一个view controller设置了Initial
Scene。您必要拔取一个view conroller作为story board的首先个界面:

图片 24

 

 

14,怎么着给uiNavigationBar 设置背景颜色或是自定义图片

在类型中添加如下代码:

//设置背景颜色:

 

[java] view
plain
copy图片 25图片 26

 

  1. UIColor *itemcolor = [UIColor colorWithRed:100.0f/255.0f green:176.0f/255.0f blue:0.0f/255.0f alpha:0.3f];  
  2. self.navigationController.navigationBar.tintColor = itemcolor;  

//设置自定义的图形:

 

 

[java] view
plain
copy图片 27图片 28

 

  1. [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@”navbg.png”] forBarMetrics:UIBarMetricsDefault];  

5.0之上,api有了上边setBackgroundImage的办法,可以一向设置,假使项目需求适配5.0以下版本的设备,最好加一个判读,是或不是有此函数,有则设置,没有就通过drawRect方法设置。

 

 

其余:设置背景图片无法匹配backButton或rightButtonItem,所以回来按钮或左边自定义的Bar
button Item须求自行处理。

 

15,怎么着给uiview设置背景图片

在storyboard或xib中,添加一个uiview,属性设置栏一般都有设置背景颜色,样式,透明度alpha,不过尚未提供设置image,唯有在imageview中才有,所以,要想设置背景图片,只好在代码中安装,如下:

 

[java] view
plain
copy图片 29图片 30

 

  1. [leftNaviView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@”pabb_leftnaviview_bg.png”]]];  

如此那般,背景就足以变成想要的图形了。其它,设置大小:

 

 

[java] view
plain
copy图片 31图片 32

 

  1. [leftNaviView setFrame:CGRectMake(9, 60, 120, 250)];  

 

 

效果图:

图片 33

 

16,怎么着在档次用代码打开AppStore

[java] view
plain
copy图片 34图片 35

 

  1.         //以下是透过id打开此软件的评头品足  
  2. //        int m_appleID = 576337094;  
  3. //        NSString *str = [NSString stringWithFormat:  
  4. //                                 @”itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=%d”,  
  5. //                                 m_appleID ];  
  6.         //以下是经过appstore链接到自己使用在店铺的岗位  
  7.         NSString *url = [NSString stringWithFormat:@”http://itunes.apple.com/cn/app/huo-xing-she-xin-dian/id549425594?l=en&mt=8"\];  
  8.         [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];  

把上述代码直接拷贝到想要完毕点击跳转的操作方法内就可以了,通过appID,随意可以因而appstore打开应用,直接用url就可以链接到了。很简单,一般都用在检讨更新的时候。

 

 

17,怎么样代码达成跳转safari,phone或message?

在对应的代码中写入:

1、调用 电话phone
[[UIApplication sharedApplication] openURL:[NSURL
URLWithString:@”tel://4008008288″]];

2、调用自带 浏览器 safari
[[UIApplication sharedApplication] openURL:[NSURL
URLWithString:@”http://www.abt.com"\]\];

3、调用 自带mail
[[UIApplication sharedApplication] openURL:[NSURL
URLWithString:@”mailto://admin@abt.com”]];

4、调用 SMS
[[UIApplication sharedApplication] openURL:[NSURL
URLWithString:@”sms://800888″]];

5,跳转到系统安装相关界面

[[UIApplication sharedApplication] openURL:[NSURL
URLWithString:@”prefs:root=WIFI”]];

 

内部,发短信,发Email的法力只好填写要发送的地点或号码,不能起首化发送内容,倘若想已毕内容的话,还索要更扑朔迷离一些,已毕其各自的信托方法。

若必要传递内容可以做如下操作:
加入:MessageUI.framework
 
#import <MessageUI/MFMessageComposeViewController.h>
 
兑现代理:MFMessageComposeViewControllerDelegate

 

[java] view
plain
copy图片 36图片 37

 

  1. 调用sendSMS函数  
  2. //内容,收件人列表  
  3. – (void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSArray *)recipients  
  4. {  
  5.    
  6.     MFMessageComposeViewController *controller = [[[MFMessageComposeViewController alloc] init] autorelease];  
  7.    
  8.     if([MFMessageComposeViewController canSendText])  
  9.    
  10.     {  
  11.    
  12.         controller.body = bodyOfMessage;     
  13.    
  14.         controller.recipients = recipients;  
  15.    
  16.         controller.messageComposeDelegate = self;  
  17.    
  18.         [self presentModalViewController:controller animated:YES];  
  19.    
  20.     }     
  21.    
  22. }  
  23.    
  24. // 处理发送完的响应结果  
  25. – (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result  
  26. {  
  27.   [self dismissModalViewControllerAnimated:YES];  
  28.    
  29.   if (result == MessageComposeResultCancelled)  
  30.     NSLog(@”Message cancelled”)  
  31.   else if (result == MessageComposeResultSent)  
  32.     NSLog(@”Message sent”)    
  33.   else   
  34.     NSLog(@”Message failed”)    
  35. }  
  36.    
  37.    
  38. 发送邮件的为:  
  39. 导入#import <MessageUI/MFMailComposeViewController.h>  
  40. 落实代理:MFMailComposeViewControllerDelegate  
  41.    
  42. //发送邮件  
  43. -(void)sendMail:(NSString *)subject content:(NSString *)content{  
  44.    
  45.     MFMailComposeViewController *controller = [[[MFMailComposeViewController alloc] init] autorelease];  
  46.    
  47.     if([MFMailComposeViewController canSendMail])  
  48.    
  49.     {  
  50.    
  51.         [controller setSubject:subject];  
  52.    
  53.         [controller setMessageBody:content isHTML:NO];  
  54.    
  55.         controller.mailComposeDelegate = self;  
  56.    
  57.         [self presentModalViewController:controller animated:YES];  
  58.    
  59.     }      
  60. }  
  61.    
  62. //邮件达成处理  
  63. -(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{  
  64.    
  65.     [self dismissModalViewControllerAnimated:YES];  
  66.    
  67.     if (result == MessageComposeResultCancelled)  
  68.         NSLog(@”Message cancelled”);  
  69.     else if (result == MessageComposeResultSent)  
  70.         NSLog(@”Message sent”);   
  71.     else   
  72.         NSLog(@”Message failed”);    
  73.    
  74. }  
  75.    
  76. 默许发送短信的界面为英文的,解决办法为:在.xib 中的Localization添加一組chinese  

 

 

18,注册安装应用程序访问用户手机发送推送音讯(弹出Alertview)

 [[UIApplication sharedApplication]
registerForRemoteNotificationTypes:
     (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert)];

 

19,轻松自定义复选框按钮

-(void)checkboxClick:(UIButton *)btn
{
    btn.selected = !btn.selected;
}

  • (void)viewDidLoad {
    UIButton *checkbox = [UIButton buttonWithType:UIButtonTypeCustom];
        
        CGRect checkboxRect = CGRectMake(135,150,36,36);
        [checkbox setFrame:checkboxRect];
        
        [checkbox setImage:[UIImage imageNamed:@”checkbox_off.png”]
    forState:UIControlStateNormal];
        [checkbox setImage:[UIImage imageNamed:@”checkbox_on.png”]
    forState:UIControlStateSelected];
        
        [checkbox addTarget:self action:@selector(checkboxClick:)
    forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:checkbox];    
    }

 

20,程序中取得软件的版本号和app名称

 

[java] view
plain
copy图片 38图片 39

 

  1. 应用程序的名目和版本号等信息都保留在mainBundle的infoDictionary字典中,用下边代码可以取出来。  
  2. NSDictionary* infoDict =[[NSBundle mainBundle] infoDictionary];  
  3. NSString* versionNum =[infoDict objectForKey:@”CFBundleVersion”];//版本名称  
  4. NSString*appName =[infoDict objectForKey:@”CFBundleDisplayName”];//app名称  

[java] view
plain
copy图片 40图片 41

 

  1. <p style=”margin-top: 0px; margin-bottom: 0px; font-size: 11px; font-family: Menlo;”><span style=”color: #703daa”>NSString</span> * versionShortString = [infoDict <span style=”color: rgb(61, 29, 129);”>objectForKey</span>:<span style=”color: #d12f1b”>@”CFBundleShortVersionString”</span>];//标识应用程序公布版本号</p>NSString*text =[NSString stringWithFormat:@”%@ %@”,appName,versionNum,<span style=”font-family: Menlo; font-size: 11px; white-space: pre; rgb(240, 240, 240);”>versionShortString</span>];  

此version 为工程info下的Bundle version字段值:value可以无限制定义。

 

图片 42

图片 43

 

CFBundleVersion,标识(发布或未发布)的其中版本号。那是一个干燥增添的字符串,包含一个或多少个期间分隔的整数。

CFBundleShortVersionString  标识应用程序的披露版本号。该版本的版本号是多个时期分隔的平头组成的字符串。第四个整数代表首要修改的版本,如落实新的功力或首要变更的修订。首个整数表示的改良,达成较非凡的特点。第多个整数代表维护版本。该键的值分裂于“CFBundleVersion”标识。

   图片里的 Version 对应的就是CFBundleShortVersionString (公布版本号
如当前上架版本为1.1.0  之后您更新的时候能够改为1.1.1)
   Build 对应的是
CFBundleVersion(内部标示,用以记录开发版本的,每一次换代的时候都亟待比上三遍高
如:当前版本是11  下两次就要压倒11 比如 12,13 ….10000)

 

 

21,怎么着使显示器一贯维系唤醒状态?(就是不自动黑屏)

譬如,假如大家做一个播放录像的功能时,想在播放的时候,不会自行进入屏保(黑屏)

若是在代码里进入这一行:

 

[java] view
plain
copy图片 44图片 45

 

  1. [[UIApplication sharedApplication] setIdleTimerDisabled:YES];  

当然,在想要黑屏的时候还亟需把它设置为NO(比如视频播放完成时),不然显示器会在此软件运行下直接亮着。

 

 

22,在Xcode中,文件名后小方框中的A(M或C)表示什么看头啊?

图片 46

 表示在版本控制中,自上一次提交以来,文件做了改动。貌似唯有在包涵版本控制的品种代码中才会来得,也就是说你的花色采纳了SVN、GIT等工具后,会在Xcode中分辨出来。

‘A’  新增

‘D’  删除

‘M’  修改

‘R’  替代

‘C’  冲突

‘I’  忽略

‘?’  未受控

‘!’  丢失,一般是将受控文件直接删除导致 

 

23,有关ios5上显示器旋转,view设置Frame的相干题材

 

显示屏旋转一共有4个相关属性(旋转方向):

 

UIInterfaceOrientationLandscapeLeft

UIInterfaceOrientationLandscapeRight

UIInterfaceOrientationPortrait

UIInterfaceOrientationPortraitUpsideDown

前多少个是横屏时的状态,后七个是正规境况(Portrait)和上下颠倒(UpsideDown)时的情况。

【注意:Left和Right三个左右模拟器旋转时移动的取向正好是相反的,但活动后Home的自由化,就像下图所示】

现实见下图:

图片 47

 

里头涉及到多少个艺术,在ViewController中默许会完成这些点子:

 

[java] view
plain
copy图片 48图片 49

 

  1. – (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation  
  2. {  
  3.     //除了不容许旋转屏幕后:上下颠倒,其余方向都运行旋转  
  4.     //假使想都运作,可以一直回到YES,或都不允许NO  
  5.     return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);  
  6.       
  7. }  

以此方式是宣称此ViewController所运行屏幕旋转的动向,一共4系列型,全部同意重回YES,上图所示除了分裂意上下颠倒,其余都足以。【注意,项目设置Supported
Device Orientations
所协助的显示器旋转类型并不影响此方法的装置,也就是说,哪怕Support只辅助Portrait,方法里安装UpsideDown,此ViewController也会落实上下颠倒旋转的】

 

 

其次个章程,是大家相比较常用的,也就是在装置即将以某个方向旋转以前,大家在其情景(方向)设置组件或view的Frame,bound,等急需变更的性能时所用到的不二法门。

 

[java] view
plain
copy图片 50图片 51

 

  1. -(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{  
  2.   
  3.     //屏幕旋转到横屏时  
  4.     if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) {  
  5.         myMapview.frame = CGRectMake(0,0,480, 300);  
  6.     }  
  7.     //显示器旋转到竖屏时  
  8.     else{//== else if(UIInterfaceOrientationIsPortrait(toInterfaceOrientation))  
  9.         myMapview.frame = CGRectMake(0, 0, 320,460);  
  10.     }  
  11.   
  12. }  

怀有旋转屏幕后须要改变组件尺寸属性的装置都得以在那几个法子里面落成。

 

【注意,以上四个章程,在风靡的ios6貌似已经不提倡使用了,除非要适于旧设备,新的团团转显示器的相关措施可以网络寻找一下】

http://blog.csdn.net/zzfsuiye/article/details/8251060
 IOS6屏幕旋转详解(自动旋转、手动旋转、包容IOS6此前系统)

http://blog.csdn.net/huifeidexin\_1/article/details/7826159
 ios旋转屏幕统计 详细教程

http://blog.csdn.net/xiaoyun8822/article/details/8213738 Ios5(三)显示器的旋转和分寸设置;

如上为参照教程

 

 

 

24,Xcode编译警告和错误解决措施

1 Application windows are expected to have a root view controller at the
end of application launch

 

解决方法:在ios5之上版本,应用程序加载时,须要一个 root view controller
,所以须要编制代码

_rootViewController = [[RootViewController alloc] init];

self.window.rootViewController = _rootViewController;

此问题基本上是在Xib或Storyboard下操作ViewController时不小心连接RootViewController
的平底View所导致的,检查删除没有效应的view连接线,或是Clean,再运行。

 

 

25,怎么着设置视图(view)在最上层?或是view1和view2互换?

情景再次出现:

俺们在storyboard的一个视图里添加了一个view1用作快速效用导航;然后在相应的viewController里实例化了一个Mapview的地图view2,大小是所有显示器,那样一来,就把大家在storyboard中加上的view1覆盖了,那几个时候,大家想把view1在地形图view2的方面,该如何是好?

一句话来说就是window中subview的置换。

 

第一通过:NSLog(@”subviews:%@”,self.view.subviews);
那一个大家得以观察眼前下拥有的subview(NSArray类型)如下图所示:

图片 52

 

可以看到一共有3个view:UILabel 地图view2,添加的view1

俺们后天要做的就是把后双方对调一下,所以在self.view
中追寻一下看有没有replace相关的法门

图片 53

就是其一主意,第三个参数是要拓展轮换的地形图view2,第四个参数是互换后显得的view1。

 

 [self.viewexchangeSubviewAtIndex:1withSubviewAtIndex:2];

因为经过log打印,大家曾经明白Mapview在第三个下标的岗位,view1在其次个下标的职责。

图片 54图片 55

劳苦功高告成。记住那么些艺术:self.view exchangeSubviewAtIndex:withSubviewAtIndex:];

 

 

26,如何隐藏UINavigationBar

一些时候,大家的视图使用了Navigation Controller
,可是主界面(rootviewcontroller)或其余push进入的界面
想使用一个全屏的view,就是说,不出示顶部的navigationBar,这些时候,就要求大家来掩藏了。

 

//隐藏NavigationBar

-(void) viewWillAppear:(BOOL)animated{

    

    [self.navigationControllersetNavigationBarHidden:YESanimated:YES];
//设置隐藏

    [super viewWillAppear:animated];

}

-(void) viewWillDisappear:(BOOL)animated{

 

    [self.navigationControllersetNavigationBarHidden:NOanimated:YES];

    [super viewWillDisappear:animated];

        

}

 

 

27,怎么着限制UIText菲尔德(Field)输入长度(监听textField文本变化的轩然大波)

1、实现UITextFieldDelegate协议;

2、实现textField:shouldChangeCharactersInRange:replacementString:方法;

 

[java] view
plain
copy图片 56图片 57

 

  1. -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{  
  2.     int kMaxLength = 11;  
  3.       
  4.   
  5.     NSInteger strLength = textField.text.length – range.length + string.length;  
  6.     //输入内容的长短 – textfield区域字符长度(一般=输入字符长度)+替换的字符长度(一般为0)  
  7.  return (strLength <= kMaxLength);}  

 

 

如上代码,借使大家简要的如此写: if(range.location<=11) return  或是
if (textfield.text.length>=11)
那样尽管也能限制位数为11位,然则只要因而放大镜把光标切换来事先的位数后,你依然可以输入,并且还会招致输入11位后,键盘上的退格(X键)不能运用,原因是:大家在location到达11位后,重返了NO,键盘不能对应:添加,修改,删除。那是很要紧的。所以照着自己下边的。

措施解读:

– (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString
*)string
功能:

  把text菲尔德(Field)中地方为range的字符串替换为string字符串;

  此函数在text菲尔德(Field)内容被涂改时调用;

返回值:

  YES,表示修改生效;NO,表示不做修改,text菲尔德(Field)的内容不变。

参数表达:
  textField:响应UITextFieldDelegate协议的UITextField控件。
  range:    UIText菲尔德(Field)控件中光标选中的字符串,即被替换的字符串;

        
 range.length为0时,表示在地点range.location插入string。

  string:    替换字符串; string.length为0时,表示删除。

 

 

28,使用ios5.0过后的一个办法自定义table View Cell

 

[cpp] view
plain
copy图片 58图片 59

 

  1. UINib *nib = [UINib nibWithNibName:@”TvWeiboCell” bundle:nil];  
  2.         [tableView registerNib:nib forCellReuseIdentifier:CellIdentifier];  

 

图片 60

 

 

29,iOS和surface各app图标和起步页尺寸

iphone APP图标尺寸:57X57    高清:114X114  单位:pixel  
命名:无特殊要求,最好是,app_icon  高清的要加@2x

iphone 启动页尺寸:大小最好是320X460或320X480(相当于一体屏幕尺寸)
单位:pixel 命名:Default.png 

GALAXY Tab APP图标尺寸:72X72 高清:144X144  单位:pixel 命名:

ipad 启动页尺寸:大小最好是768X1004或768X1024  单位:pixel
命名:Default-Portrait~ipad.png   高清:Default-Portrait@2x~ipad.png

 

30,如何用NSLog输出NSRange,CGRect等结构体

NSString 中的方法:

NSStringFromCGPoint   
NSStringFromCGSize  
NSStringFromCGRect  
NSStringFromCGAffineTransform   
NSStringFromUIEdgeInsets

 

如:NSLog(@”rect1: %@”, NSStringFromCGRect(rect1));

 

 

 

31,如何在navigationviewcontroller中,pop到事先不相同的viewcontroller(push过的viewcontroller)?

图片 61

如上图所示,回退到界面2,很简短:  [self.navigationControllerpopViewControllerAnimated:YES];
 间接就回退到界面2了,然则我们既不想回来rootviewcontroller,也不想回去界面2,只想回去界面1,该怎么做?

笨方法:在界面1要跳转到界面2时,把温馨self,set到界面2(前提界面2要安装一个id类型的特性,用来存放在界面1self,以此类推,当在界面3想退到界面1时,

[self.navigationControllerpopToViewController:controlleranimated:YES];

 

其落成在刚知道,一个很粗略的主意:

 

[cpp] view
plain
copy图片 62图片 63

 

  1. NSArray *viewControllers=[self.navigationController viewControllers];  
  2. UIViewController *controller=[viewControllers objectAtIndex:1];  

 

想起来navigation的建制了呢,每当我们push到一个viewcontroller时,就会把这些viewcontroller的实例保存到nsarray里,通过array可以取得到其余一个viewcontroller,那不就解决问题了么?

 

[cpp] view
plain
copy图片 64图片 65

 

  1. [self.navigationController popToViewController:controller animated:YES];  

【注意】千万不要在这么些地点实例化 界面1
然后popToViewController,那种格局是非正常的。

 

32,self.navigationItem.backBarButtonItem 的title设置

 

新写的App中需求使用UINavigationController对一一页面举行导航,但鉴于第顶级页面的title较长,在进入第二级页面后回去按钮leftButtonItem的title就会变得很长,对NavigationBar空间占据很大,而且不美观,于是接纳代码对leftButtonItem的title文本举办修改,无论是设置self.navigationItem.leftBarButtonItem.title
= @”再次回到”;仍然self.navigationItem.backBarButtonItem.title =
@”重临”;都尚未效能,title文本始终不会爆发变化。到网上乱搜一通后,获得了以下解决办法,相对来说相比较简单,特记录如下:

    在第超级页面的viewDidLoad方法中投入以下代码:

 

[cpp] view
plain
copy图片 66图片 67

 

  1. UIBarButtonItem *temporaryBarButtonItem = [[UIBarButtonItem alloc] init];  
  2.  temporaryBarButtonItem.title =@”返回”;  
  3.  self.navigationItem.backBarButtonItem = temporaryBarButtonItem;  
  4.  [temporaryBarButtonItem release];   // 也就是用一个新的按钮在进行导航前将原先的回来按钮替换掉就可以了。  

故此,通过那一个大家得以了然,self.navigationItem.backBarButtonItem是在一流页面设置的(提前安装下一个页面的回到按钮),而self.navigationItem.leftBarButtonItem/rightBarButton是在二级页面设置的,(随意安装本页面的左右按钮,左按钮将取代系统的回到按钮)

 


 

相似一个程序中有一个UIWindow,一个UINavigationController,一个根UIViewController,七个子UIViewController。

UIWindow是一切可视界面的器皿,里面放置大家来看的UIView。
UIView负责处理显示屏上一个矩形区域的绘图,UIView中还可包罗子UIView。
UIWindow是UIView类的扩大,可以视作是百分之百屏幕的根UIView。
UIViewController负责管理UIView的层次结构。可以有三个UIViewController。

一个UIViewController中有一个顶部的UINavigationBar、一个根UIView,多少个子UIView。
UINavigationBar中有一个UINavigationItem,UINavigationItem。

UINavigationController是用以构建分层应用程序的要紧工具,它爱护了一个UIViewController栈。
其一栈中必须有一个根UIViewController,其余的UIViewController都是子UIViewController。

UINavigationItem表示UINavigationBar中的控件,比如左按钮、中间标题、右按钮。
UINavigationController会自动在当下子UIViewController的UINavigationBar左侧添加一个再次来到按钮。
按钮名称是上一个UIViewController的题目。


33,self.navigationItem和self.navigationController.navigationItem的区别?

 

/**********************************************/

self.navigationItem

self.navigationController.navigationItem

self.navigationController.navigationBar

/**********************************************/

 

1,  不要混淆 self.navigationItem  和 self.navigationController.navigationItem
,

 

UINavigationItem 本身是用来 定制 ViewController自己在被导航进度中的 appearence, navigationItem是 UIViewController类关于UINavigationControllerItem类其他增添:

 

@interface UIViewController
(UINavigationControllerItem)

 

@property(nonatomic,readonly,retain)UINavigationItem *
navigationItem;

 

 

@end

 

所将来人 是调用 VC的所在的导航控制器导航控制器自己团结当做VC的 navigationItem,是导航的附加。

 

2. UINavigationBar 持续于 UIView,隶属于漫天 UINavigationController ,用来定义整个导航进度中的导航栏的颜料等别的数值,(类似于 self.tabBarController.tabBar  UINavigationBar
,只需要一个装置通用的主干性能),只能够通过self.navigationController.navigationBar来访问。

 

亦因而,定制于导航堆栈里某个VC 的时候,一般通过self.navigationItem,   比如常用的self.navigationItem.leftBarButtonItem,self.navigationItem.rightButtonItem, 同时假若协调来定制导航栏的外观的话,就要用到self.navigationItem.titleView,这些可以平昔用一个 CustomView 赋值于 self.navigationItem.titleView即可。

 

此刻,如果急需,就得投机画导航过程中的重返按钮了。

 

 

 

34,图片模糊化处理

 

[cpp] view
plain
copy图片 68图片 69

 

  1. +(UIImage *)scale:(UIImage *)image toSize:(CGSize)size  
  2. {  
  3.     UIGraphicsBeginImageContext(size);  
  4.     [image drawInRect:CGRectMake(0, 0, size.width, size.height)];  
  5.     UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();  
  6.     UIGraphicsEndImageContext();  
  7.     return scaledImage;  
  8. }  

 

35,NSString转换大小写的用法

iOS
6中NSString对象有些新的接纳格局,可以让字符串转变成全体大写,全体大写,或者每个单词首字母大写。
 
代码如下所示:
 

[cpp] view
plain
copy图片 70图片 71

 

  1. NSString *str = @”mobile developer tips”;  
  2.    
  3. // Convert string to uppercase  
  4. NSString *upperStr = [str uppercaseStringWithLocale:[NSLocale currentLocale]];  
  5. NSLog(@”upperStr: %@”, upperStr);  
  6.    
  7. // Convert string to caps  
  8. NSString *capStr = [upperStr capitalizedStringWithLocale:[NSLocale currentLocale]];  
  9. NSLog(@”capStr: %@”, capStr);  
  10.    
  11. // Convert string to lowercase  
  12. NSString *lowerStr = [capStr lowercaseStringWithLocale:[NSLocale currentLocale]];  
  13. NSLog(@”lowerStr: %@”, lowerStr);  

运作结果:

 

图片 72

 

36,怎样得到手机硬件音讯?

通过应用UIDevice: 

 

[[UIDevice currentDevice] systemName];
[[UIDevice currentDevice] systemVersion];//os version
[[UIDevice currentDevice] uniqueIdentifier];
[[UIDevice currentDevice] model];
[[UIDevice currentDevice] name];

真机上结果:
System Name: iPhone OS
System Version: 4.2.1
Unique ID: 9b5ded78d5fa0ac96250f8b4af0e46f40b96ea6d
Model: iPhone
Name: “wwk”的 iPhone

模拟器上结果:

System Name: iPhone OS
System Version: 4.2
Unique ID: 21FFE0FF-429B-5D0B-96D2-EADCA3203260
Model: iPhone Simulator
Name: iPhone Simulator

uniqueIdentifier:小米通过,向多少个硬件标识符和设施体系号应用内部散列算法,而生成这一标识符。

http://blog.csdn.net/qiwancong/article/details/7914923 参考

 

37,真机调试:could not change executable permissions错误?

虽说更改了新demo的bundle
identifier和事先的identifier一样,但是真机上还保留着前边调试时的demo,所以新的工程假如应用同样的identifier真机调试,必要先把机器上原本的demo删除,再接纳新工程调试。

38,判断iphone5显示屏的宏定义

 

[cpp] view
plain
copy图片 73图片 74

 

  1. #define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)  

 

在急需判定显示屏尺寸的地方:

 

[cpp] view
plain
copy图片 75图片 76

 

  1. mymapview = [[BMKMapView alloc] initWithFrame:CGRectMake(0,0,320,460+(iPhone5?88:0))];  

 

iphone5的View为568,减去Nav(44)+职责栏(20),为504,相比较iphone4s及以前版本的480,减去Nav+职务栏,为416,高出88(差距).

http://www.cnblogs.com/maxfong/archive/2012/10/04/2711379.html

 

39,invalid deployment target for -stdlib=libc++ (requires iOS 5.0 or later)错误

 

当选项目–target—build settings  找到C++Standard Library
改成:Compiler Default,再编译就不会有不当了.

图片 77

 

40,如何调用系统声音?【iphone 调用系统铃声与震撼效能】

率先要在工程里投入奥迪o Toolbox
framework那么些库,然后在需求调用的公文里
#import <AudioToolbox/AudioToolbox.h>

最后在急需播放提醒音的地点编写如下代码:

奥迪(Audi)o瑟维斯(Service)(Service)sPlaySystemSound(1000);//新邮件新闻提醒

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); //震动

注:括号中为系统声音的id,详见请参考以下网址http://iphonedevwiki.net/index.php/AudioServices。

http://blog.csdn.net/tskyfree/article/details/8096500

http://www.cnblogs.com/martin1009/archive/2012/06/14/2549473.html

http://www.cnblogs.com/chen1987lei/archive/2012/02/07/2341535.html

 

41,重复调用2次loadView和viewDidLoad

最为不要在UIViewController的loadView方法中改变状态栏的可视性(比如状态栏由展现变为隐藏、或者由隐藏变为突显),因为会导致重复调用2次loadView和viewDidLoad方法。

 

[cpp] view
plain
copy图片 78图片 79

 

  1. 错误代码:  

[cpp] view
plain
copy图片 80图片 81

 

  1. – (void)loadView {  
  2.       NSLog(@”loadView”);  
  3.       // 隐藏状态栏  
  4.       [UIApplication sharedApplication].statusBarHidden = YES;  
  5.         
  6.       // …. 创建UIView  
  7.       self.view = [[[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds] autorelease];  
  8.       self.view.backgroundColor = [UIColor grayColor];  
  9.   }  
  10.     
  11.   – (void)viewDidLoad {  
  12.       [super viewDidLoad];  
  13.       NSLog(@”viewDidLoad”);  
  14.   }  

打印音信:

 

 

1 2013-05-14 00:51:36.152 test[2251:c07] loadView  
2 2013-05-14 00:51:36.153 test[2251:c07] loadView  
3 2013-05-14 00:51:36.153 test[2251:c07] viewDidLoad  
4 2013-05-14 00:51:36.154 test[2251:c07] viewDidLoad

 

 

 

即使如此运行效果是对的,不过系统连接调用了2次loadView和viewDidLoad方法,导致创立了2次UIView,造成了不须要的支付。

原因分析:

气象栏由突显变为隐藏,意味着屏幕的可用中度变长了,UIViewController的UIView的莫大也要重新调整,由此系统会重新调用loadView方法创造UIView,创立落成后再一次调用viewDidLoad方法。

 

42,点击UIButton 无法暴发触摸事件

 

万一在UIImageView中添加了一个按钮,你会发现在默许情况下那几个按钮是无力回天被点击的,须要设置UIImageView的userInteractionEnabled为YES:

imageView.userInteractionEnabled = YES;

设置为YES后,UIImageView内部的按钮就可以被点击了

 

43,怎样启动app时全屏彰显Default.png(图片)?

多数app在起步过程中全屏显示一张背景图片,比如博客园乐乎会突显那张:

图片 82

 

要想在iOS中达成那种效果,毫无压力,格外地概括,把必要全屏显示的图样命名为Default.png即可,在iOS
app启动时默许会去加载并全屏显示Default.png。

也得以用其它名目来命名图片,在Info.plist配置一下即可:

图片 83

 

布局过后,app启动时就会去加载并全屏呈现lufy.png

在默许意况下,app突显Default.png时不用真正的”全屏展现”,因为顶部的境况栏并不曾被隐形,比如上边的效率:

图片 84

 

多数意况下,大家都想隐藏状态栏,让Default.png真正全屏呈现。

说到此处,可能有人立时就想开了一种方法:在AppDelegate的application:didFinishLaunchingWithOptions:方法中添加如下代码:

[UIApplication sharedApplication].statusBarHidden = YES; 

本人只可以说你的思绪是对的,但骨子里达不到想要的机能,你会意识突显Default.png时状态栏依旧存在的,等Default.png呈现完结后,状态栏才被隐形。

本人先表达下何以那种艺术不可行,其实原因很粗略:

1> Default.png是在app启动进度中加载的,并不是在app启动完成后再加载的

2>
AppDelegate的application:didFinishLaunchingWithOptions:方法是在app启动完结后才调用的

下边说一下缓解方案,在Info.plist中扩展一个计划即可:

图片 85

 

此间的YES表示在app开始化(启动)的时候就隐藏状态栏。

当然,在Default.png展现完成后状态栏照旧隐藏的。若是想再度彰显状态栏,补上下边代码即可:

[UIApplication sharedApplication].statusBarHidden = NO; 

 

 

 

 

44,使用ASIHTTPRequest保存cookies

借使我的APP,第三次启动请求了登录接口并取得了Cookie,然后我把APP关了,下次先导APP,我不请求登录接口了,那上次获得的库克(Cook)ie就不设有了。假若须要,那么2种艺术,下次起步app,自动登入,那样能收获服务器分配给你的cookier(这一种是最好的,因为session也会晚点),还有一种是你把上次登入的时候,得到的cookier存起来,然后下次起步app的时候,手动给请求(ASIHTTP)添加cookie。

故而当第五次登录成功后,可以把cookie保存到CoreData,SQLite,UserDefault等,等到下次网络请求时,读取:

    ASIFormDataRequest *request = [ASIFormDataRequest
requestWithURL:UserInfoURL];
    [request setRequestMethod:@”POST”];
    [request addRequestHeader:@”Cookie” value:[NSString
stringWithFormat:@”cookie=%@”,[[NSUserDefaults standardUserDefaults]
objectForKey:@”cookie”]]];//把cookie的值放进Header里,那么些cookie的值是一串很长的字符串。

 

45,UIText菲尔德(Field)唯有当有字符输入后,键盘右下角的搜索/重临/done/等等键才方可选拔

 

Text菲尔德(Field)设置这么些特性为YES就可以了,默许为NO

searchField.enablesReturnKeyAutomatically =YES;

图片 86

 

46,类似QQ等IM软件,长度和可观不等的闲话气泡的图纸是如何做的?拉伸?

图片 87

 

骨子里是一个小气泡png,然后拉伸中间部分,八个角不拉动,就是部分拉伸。ios自带方法,四个角可以不拉伸的,如下:

图片 88

 

47,UITableView中有七个UIText菲尔德时,被挡住的TextField如何兑现活动进化弹起?

首先要促成Text菲尔德(Field)的delegate,在格局:

 

[cpp] view
plain
copy图片 89图片 90

 

  1. – (void)textFieldDidBeginEditing:(UITextField *)textField {  
  2.     [self.tableView setContentOffset:CGPointMake(0, 70) animated:YES];  
  3.     
  4. }  

 

那申明当初步输入时,tableview在原来的根底上发展抬起70个离开。八个UITextFiled能够因此判断来采纳CGPoint的调整中度,我那写的是70.

tableview的scrollEnabled属性一定假诺YES;要不然滚动不了了。

记得在return时复原tableview的位置:

 

[cpp] view
plain
copy图片 91图片 92

 

  1. – (BOOL)textFieldShouldReturn:(UITextField *)sender {  
  2.     [self.tableView setContentOffset:CGPointMake(0, 0) animated:YES];  
  3.     return YES;  
  4. }  

 

48,ios怎么样在调节时,轻松找到程序在哪里崩溃?

大家给自己的工程添加一个通用的断点:

图片 93图片 94

图片 95

 

一步步按上边图成功操作。

再运行程序

图片 96

 

自动就断点到那边来了,

log信息是:

 

[cpp] view
plain
copy图片 97图片 98

 

  1. 2013-05-20 11:14:19.635 GestureRecognizer[1491:c07] -[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x7a88df0  
  2. 2013-05-20 11:15:21.148 GestureRecognizer[1491:c07] *** Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘-[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x7a88df0’  

那样很简短就能窥见先后崩溃是因为value没有
isEqualToString方法。即使没加上面这么些通用的断点,那程序会一贯断点到main函数去。

 

49,UIImageView 怎样兑现windows 桌面类似的背景壁纸屏幕(很小的图纸会显示N八个)?

从UImageView上找ContentMode或clipToBounds是都不管用的,正确的不二法门是,不用UImageView,使用UIView,然后设置backgroundColor属性为我们的图样,那样的话自动会以屏幕的点子呈现。

 

[cpp] view
plain
copy图片 99图片 100

 

  1. UIView *gridView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 195)];  
  2. gridView.backgroundColor = [UIColor colorWithPatternImage:BUNDLE_IMAGE(@”blue_grid”)];  
  3. [self.view addSubview:gridView];  
  4. [gridView release];  

下图所示:(原图是一个6X6的方格)

 

图片 101

 

 

50,UITableViewCell 的backgroundColor不起作用的问题?

在付出时,想要在tableview中的某一个Cell设置选中状态,并且Cell的背景颜色是一个自定义颜色。

 

[cpp] view
plain
copy图片 102图片 103

 

  1. -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{  
  2.       
  3. <span style=”white-space:pre”>    </span>//省略….  
  4.       
  5.     cell.textLabel.font = [UIFont systemFontOfSize:6.0];  
  6.     cell.textLabel.text = @”13832207020″;  
  7.   
  8.     if (indexPath.row==0) {  
  9.   
  10.         [cell setBackgroundColor:[UIColor colorWithRed:100.0f/255.0f green:176.0f/255.0f blue:0.0f/255.0f alpha:1.0f]];  
  11.     }  
  12.     else{  
  13.         [cell setBackgroundColor:[UIColor whiteColor]];  
  14.     }  
  15.       
  16.     return cell;  
  17. }  

那样的话,第1行cell就应有是我们设置好的水彩,不过请留心,此办法在UITableViewStylePlain的风骨下有效,在
UITableViewStyleGrouped的样式下是不行的!那个跟tableview的backgroundView和backgroundColor是从未关系的,个人臆度应该是在Grouped风格下,cell选中的颜色有体系的view遮罩,导致大家设置的黔驴技穷出示出来。

 

【补充】要是想在reload或init时设置tableview的某一cell为
selected状态,千万不要使用cell setSelected:YES animated:YES,使用tableview的点子:

 

[cpp] view
plain
copy图片 104图片 105

 

  1. NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];  
  2. terminalTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];  

 

51,UITableViewCell选中时contentView中各组件的高亮状态

运用系统或简捷自定义的UITableViewCell时,当选中某一行Cell后,除了背景颜色改变外,Cell上独具的零部件(数据)比如UILabel,UIbutton等都被自动突显成了其

Highlighted(高亮)状态下的意义,(若是想显示出效益,你的这些自定义的零部件必须求设置高亮状态,比如highlightedTextColor,UIControlStateHighlighted等),所以那或多或少内需更加注意,要是不想要系统的那些自动特效,有八个解决办法:

1,组件不设置highlighted下的特性

2,如若自定义的Cell:

 

[cpp] view
plain
copy图片 106图片 107

 

  1. – (void)setSelected:(BOOL)selected animated:(BOOL)animated  
  2. {  
  3.     
  4.     [super setSelected:selected animated:animated];  
  5.        
  6.     if (selected) {  
  7.         //强制系统在UITableViewCell选中时SettingButton组件的高亮状态为NO  
  8.         [(UIButton *)[self.contentView.subviews objectAtIndex:1] setHighlighted:NO];  
  9.         [settingBtn setImage:BUNDLE_IMAGE(@”accessory_sel”) forState:UIControlStateNormal];  
  10.     }  
  11.     else{  
  12.         [settingBtn setImage:BUNDLE_IMAGE(@”accessory_nor”) forState:UIControlStateNormal];  
  13.     }  
  14.       
  15.      
  16. }  

52,IOS atomic与nonatomic,assign,copy与retain的定义和区分

 

atomic和nonatomic用来控制编译器生成的getter和setter是或不是为原子操作。

        atomic

             
  设置成员变量的@property属性时,默许为atomic,提供八线程安全。

             
  在十二线程环境下,原子操作是需求的,否则有可能引起错误的结果。加了atomic,setter函数会化为下边那样:
                        {lock}
                                if (property != newValue) { 
                                        [property release]; 
                                        property = [newValue
retain]; 
                                }
                        {unlock}

        nonatomic

        禁止四线程,变量爱护,提升性能。

     
  atomic是Objc使用的一种线程爱护技巧,基本上来讲,是防备在写未成功的时候被其余一个线程读取,造成数据失实。而这种体制是消耗系统资源的,所以在魅族那种小型设备上,假使没有应用三十二线程间的简报编程,那么nonatomic是一个可怜好的取舍。

     
  提出访问器不是原子操作,而默许地,访问器是原子操作。那也实属,在多线程环境下,解析的访问器提供一个对性能的安全访问,从获取器得到的再次来到值或者通过设置器设置的值可以一遍到位,即便是其他线程也正在对其举办访问。如若您不指定
nonatomic
,在友好管理内存的环境中,解析的访问器保留并自行释放再次来到的值,即使指定了
nonatomic ,那么访问器只是不难地回来这么些值。

 

assign
        对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float,
double, char)等等。
     
  此标志表明设置器直接进行赋值,那也是默许值。在应用垃圾收集的应用程序中,若是你要一个性能使用assign,且那几个类符合NSCopying协 
        
  议,你就要明确提出那几个标记,而不是概括地动用默许值,否则的话,你将获取一个编译警告。那重复向编译器表明你实在需求赋值,即使它是 
         可拷贝的。

retain
        对其他NSObject和其子类对参数进行release旧值,再retain新值
     
  指定retain会在赋值时提示传入值的retain新闻。此属性只可以用来Objective-C对象类型,而无法用于Core
Foundation对象。(原因很令人惊叹,retain会扩张对象的引用计数,而基本数据类型或者Core
Foundation对象都未曾引用计数——译者注)。

        注意: 把目标添加到数组中时,引用计数将加码对象的引用次数+1。

copy
        对NSString
它提议,在赋值时利用传入值的一份拷贝。拷贝工作由copy方法执行,此属性只对那个履行了NSCopying协议的目的类型有效。更透彻的座谈,请参考“复制”部分。

 

copy与retain:

Copy其实是树立了一个一致的对象,而retain不是:
1.比如一个NSString 对象,地址为0×1111 ,内容为@”STR”,Copy
到此外一个NSString 之后,地址为0×2222 ,内容千篇一律。

2.新的对象retain为1 ,旧有目的没有变化retain 到此外一个NSString
之后,地址一样(建立一个指针,指针拷贝),内容自然相同,那些目的的retain值+1。
计算:retain 是指针拷贝,copy 是内容拷贝。

 

assign与retain:

1.
触及过C,那么假诺你用malloc分配了一块内存,并且把它的地方赋值给了指针a,后来您期望指针b也共享那块内存,于是你又把a赋值给(assign)了b。此时a和b指向同一块内存,请问当a不再须要那块内存,能如故不能直接出狱它?答案是或不是认的,因为a并不知道b是还是不是还在接纳那块内存,如若a释放了,那么b在使用那块内存的时候会唤起程序crash掉。
2.
打听到1中assign的题目,那么怎么样化解?最简便易行的一个主意就是采用引用计数(reference
counting),仍然地方的充足例子,大家给那块内存设一个引用计数,当内存被分配并且赋值给a时,引用计数是1。当把a赋值给b时引用计数伸张到2。那时若是a不再选择那块内存,它只需求把引用计数减1,申明自己不再持有那块内存。b不再动用那块内存时也把引用计数减1。当引用计数变为0的时候,代表该内存不再被其他指针所引述,系统能够把它直接出狱掉。
总计:下边两点莫过于就是assign和retain的不一样,assign就是直接赋值,从而可能滋生1中的问题,当数码为int,
float等原生类型时,可以使用assign。retain如同2中所述,使用了引用计数,retain引起引用计数加1,
release引起引用计数减1,当引用计数为0时,dealloc函数被调用,内存被回收。

 

53,#pragma mark -#pragma mark Initialization含义

它们告诉Xcode编译器,要在编辑器窗格顶部的艺术和函数弹出菜谱大校代码分隔开;注意 #pragma
mark –
的“-”前边不能够有空格。若是您的申明没有出现在弹出菜谱中,比如没有分隔线现身,请在Xcode菜单
“Preferences..”中的 “Code Sense”选项打消选中”Sort
listalphabetically”即可。

 

54,自定义delegate变量表明时选取assign如故retain?

我们透过发送音信给目标出发特定动作;对象发送某些变化的时候经过回调函数(callback)布告大家。对象在一定事件时有暴发的时候,就会调用对应的回调函数,触发业务逻辑。回调函数通过所谓的代理(Delegation)来完毕.

delegate使用办法:

@property (assign) <id>xxxDelegate delegate;

 
正确的运用办法是利用assign属性而不是retain。之所以对于delegate那类对象使用assign而不是用retain是为了预防循环retain(retain
loop)

 

55,给成员变量(属性)赋值时使不应用self?

动用@property和@synthesize表明一(Wissu)个成员变量,给其赋值是时要在眼前加上”self.”,以便调用成员变量的setmember方法。间接调用成员变量并且给其赋值:member=[NSString
stringWithFormat:@””];将不进行setmember 方法。

动用self调用成员变量并且给其赋值:self.member=[NSString
stringWithFormat:@””];将执行setmember方法。

56,怎么着给UIbutton 同时设置图片(Image)和文字(Title)以及它们的各样气象?

 

[cpp] view
plain
copy图片 108图片 109

 

  1.  startRangeButton = [UIButton buttonWithType:UIButtonTypeCustom];  
  2.  startRangeButton.frame = CGRectMake(85,componentOriginY, regionImage.size.width, 16);  
  3. [startRangeButton setBackgroundImage:regionImage forState:UIControlStateNormal];  
  4. //还足以设置其高亮状态startRangeButton setBackgroundImage:regionImage forState:UIControlStateHighlighted];  
  5.  startRangeButton.titleLabel.font = [UIFont systemFontOfSize:7.0];  
  6. [startRangeButton setTitle:@”2013-08-01 07:00″ forState:UIControlStateNormal];  
  7. [startRangeButton setTitleColor:COLOR(101, 199, 240, 1) forState:UIControlStateNormal];  
  8. [startRangeButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];  

代码中本人设置button背景图片为投机定义的一个regionImage,并安装了button的title
= “2013-08-01
07:00”【注意,设置了背景图片后,title只可以这么丰硕,以button.titleLabel.text形式添加会不可能出示的】,并且安装了tiitle正常和高亮下文字颜色。

 

为此见到那里,应该理解button.setBackgroundImage 和 set Image
的分歧了呢,前者是可以而且安装文字,后者是只要设置了image,不能再显示文字。

普通:图片 110高亮:图片 111

57,怎样将NSDate类型转化为离开1970/1/1的微秒差?

 

 [formatter setDateFormat:@”yyyy-MM-dd HH:mm”];
 那种格式得到的数值是标准到秒的,也就是说少1000,

然则尝试[formatter setDateFormat:@”yyyy-MM-dd HH:mm:ss”];或SS大写,或[formattersetDateFormat:@”yyyy-MM-dd
HH:mm.ss.SSS”];都不起效率,最终才发现,原来是那般

NS提姆(Tim)eInterval本身是个秒级别的double类型数值,小数点前边即毫秒数,*1000.0f即可取得阿秒级其他大运差
//为了包容java版本,事件是从1970/1/1始发
-(NSDate *)getDateTimeFromMilliSeconds:(long long) miliSeconds
{
    NSTimeInterval tempMilli = miliSeconds;
    NSTimeInterval seconds = tempMilli/1000.0;
    NSLog(@”seconds=%f”,seconds);
    return [NSDate dateWithTimeIntervalSince1970:seconds];
}

//将NSDate类型的时刻转移为NSInteger类型,从1970/1/1发端
-(long long)getDateTimeTOMilliSeconds:(NSDate *)datetime
{
    NSTimeInterval interval = [datetime timeIntervalSince1970];    
    NSLog(@”interval=%f”,interval);
    long long totalMilliseconds = interval*1000 ; 
    NSLog(@”totalMilliseconds=%llu”,totalMilliseconds);
    return totalMilliseconds;   
}

也就是说,统计结果再自己乘以1000就足以了

 

[cpp] view
plain
copy图片 112图片 113

 

  1. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];  
  2. [formatter setDateFormat:@”yyyy-MM-dd HH:mm”];  
  3.   
  4. NSDate *sDate  = [formatter dateFromString:startRangeButton.titleLabel.text];  
  5. NSDate *eDate = [formatter dateFromString:endRangeButton.titleLabel.text];  
  6. NSTimeInterval sinterval =  [sDate timeIntervalSince1970];  
  7. long long start = sinterval*1000;  
  8. NSTimeInterval einterval = [eDate timeIntervalSince1970];  
  9. long long end = einterval*1000;  
  10. [mConnectionHelper doTrack:mobile startTime:start endTime:end];  

58,ios中的全局静态变量

Objective-C 襄助全局变量

最紧要有三种达成格局:

(1)第一种和C/C++中的一样, 使用”extern”关键词;

(2)此外一种就是运用单例落成。 

(比如大家平常会把一个变量放在AppDelegate里面作为全局变量来拜会, 其中AppDelegate就是一个单例类) 

在Objective-C中怎么着完成像C++中那样的静态成员变量呢?
您要求做的是在一个类A的implementation(.m或者.mm)文件中定义一个static变量,然后为A类定义静态成员函数(class
method,也就是类格局)来操作该变量。

如此那般在其他类中你就不需求创立A类的实例来对static变量举行走访。尽管该static变量并不是A类的静态成员变量,但是也算达到了同样的效应。static变量的功效域被界定在单纯的文件中。

[cpp] view
plain
copy图片 114图片 115

 

  1. //example.h      
  2. @interface Example : NSObject {     
  3.      
  4. }   
  5. – (id)init;      
  6. +(int)instanceCount;          
  7. @end    

 

[cpp] view
plain
copy图片 116图片 117

 

  1. //example.m      
  2.  #import “example.h”           
  3. static int count;          
  4. @implementation Example      
  5. -(id)init{      
  6.     self = [super init];      
  7.     if(nil!=self){      
  8.         count+=1;      
  9.     }      
  10.  return self;      
  11. }          
  12. +(int)instanceCount{      
  13.      return count;     
  14. }          
  15. @end    

地点的例证中您就可以通过[Example
instanceCount]对静态变量count举办访问,无须创设实例。

警戒:  static
写在interface外面编译是平昔不错误的,不过编译器会报警告,这么说这么的写法是不被编辑器认同的。
荒谬:static 写在interface里面会一向报错,明显那样的语法是不被肯定的。

static关键字表明的变量必须放在implementation外面,或者措施中,如果不为它赋值默许为0,
它只在先后开机先河化三回。

59,怎样行使 NSNotificationCenter 在viewcontroller之间进行传值?

简单点的来,三个界面间传值,直接上代码了:

sendViewcontroller.m

 

[cpp] view
plain
copy图片 118图片 119

 

  1. //SettingViewController :接受值的viewcontroller  
  2. SettingViewController *setting = [[SettingViewController alloc] init];  
  3. [[NSNotificationCenter defaultCenter] addObserver:setting selector:@selector(received:) name:@”msetting” object:nil];  
  4. NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@”user”,@”type”, nil];  
  5.   
  6. [[NSNotificationCenter defaultCenter] postNotificationName:@”msetting” object:dict];  
  7. [self.navigationController pushViewController:setting animated:YES];  
  8.   
  9. [setting release];  

 

SettingViewController.m(接收值的viewcontroller)

 

[cpp] view
plain
copy图片 120图片 121

 

  1. -(void)received:(NSNotification *)notification{  
  2.   
  3.     id data = [notification object];  
  4.     NSLog(@”received data: %@”,data);  
  5. }  

 

这么就落实了宗旨的使用,跟delegate类似,注意
addObserver时,要求写目标viewcontroller的实例,而不是self。

 

60,Thread EXC_BAD_ACCESS : objc_retain, objc_getProperty 崩溃错误

图片 122

如上图所示,际遇这一个张冠李戴,从字面的意思我们大致能猜到,是有性能已经被release掉了,不过我们又选用它了,所以,一部一部排查把,一定有某个地点的习性提前被release掉了,自己手动管理内存就会有如此的困恼,代码很多,不想去找,一定要有耐心,找的长河还是能学到很多学问。

图片 123

如上图,那么些就是自我找到的来头所在,unarchiver
release掉了,而大家在其余的类中想选取location的习性。

 

61,MAC 终端(bash)svn命令不识别 command not found

在mac os 10.8中,svn Command line tools是尚未机关安装的,那样的话,svn
命令行就会失效,解决办法:
1.打开xcode偏好设置(comand+,)–>”Download” –>Components:

图片 124

2.点击“Command line tools”下载,下载达成之后安装。

3.安装已毕未来,打开终端,输入“svn
help”,即使出现如下所示,表达命令行工具安装好了。

图片 125

 

62,ios Map基特  判断坐标是不是在MapView呈现范围内

 

[java] view
plain
copy图片 126图片 127

 

  1. CLLocationDegrees leftDegrees = mapView.region.center.longitude –(mapView.region.span.longitudeDelta / 2.0);  
  2. CLLocationDegrees rightDegrees = mapView.region.center.longitude +(mapView.region.span.longitudeDelta / 2.0);  
  3. CLLocationDegrees bottomDegrees = mapView.region.center.latitude –(mapView.region.span.latitudeDelta / 2.0);  
  4. CLLocationDegrees topDegrees = self.region.center.latitude +(mapView.region.span.latitudeDelta / 2.0);  
  5. if (leftDegrees > rightDegrees) { // Int’l Date Line in View  
  6. leftDegrees = -180.0 – leftDegrees;  
  7. if (coords.longitude > 0) // coords to West of Date Line  
  8. coords.longitude = -180.0 – coords.longitude;  
  9. }  
  10. If (leftDegrees <= coords.longitude && coords.longitude <= rightDegrees && bottomDegrees <= coords.latitude && coords.latitude <= topDegrees) {  
  11. // 坐标在界定内  
  12. }  

 

63,简单的冒泡排序法

 

[objc] view
plain
copy图片 128图片 129

 

  1. -(void) doDesc{  
  2.   
  3.       
  4.     int list[12] = {12,42,21,45,6,13,89,23,48,74,3,32};  
  5.       
  6.   
  7.     for (int i=0; i<=11; i++) {  
  8.          
  9.           
  10.           
  11.         for (int j=11; j>i; j–) {  
  12.               
  13.             //从大到小  
  14. //            if (list[j]>list[j-1]) {  
  15. //                int temp =list[j];  
  16. //                list[j] = list[j-1];  
  17. //                list[j-1] = temp;  
  18. //                  
  19. //            }  
  20.             //从小到大  
  21.               
  22.             if (list[j]<list[j-1]) {  
  23.                 int temp = list[j-1];  
  24.                 list[j-1] = list[j];  
  25.                 list[j] = temp;  
  26.             }  
  27.               
  28.         }  
  29.    
  30.     }  
  31.       
  32.     for (int k =0 ; k<12; k++) {  
  33.         NSLog(@”%d == %d”,k,list[k]);  
  34.   
  35.     }  
  36.       
  37.       
  38. }  

相关文章