ACCESSiOS 开发笔记

1,Search Bar 怎样去丢背景的颜料(storyboard里只能设置background颜色,可是发现clear Color无法用)

2,NSDate使用

3,UTTabviewCell 未实例化

4,StoryBoard中segue的使用

5,nil和Nil和NULL的判断

6,给uiview设置圆角体

7,隐藏键盘的两种方法

8,UITextField密文显示输入内容

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,如何限制UITextField输入长度(监听textField文本变化之轩然大波)

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

29,iOS和iPad各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,UITextField只有当起字符输入后,键盘右下角的检索/返回/done/等等键才可下

46,类似QQ等IM软件,长度及惊人不等的闲谈气泡的图形是怎做的?拉伸?

47,UITableView中生出多个UITextField时,被遮挡的TextField如何兑现机关进化弹起?

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
plaincopyACCESS 1ACCESS 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
plaincopyACCESS 3ACCESS 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未实例化

ACCESS 5

 

4,StoryBoard中segue的使用

以出项目受到,有时有这样的需求:运行程序,登陆界面是一个随意之ViewController,只是摆设几乎单TextField和button,点击后超过反至任何选择界面,点击选择后进入我们的主界面:这个时刻,在登陆界面作过反时,会出很多之主意,如果利用storyboard,就于有利了,设置一个segue,跳反代码中

[self PerformSegueWithIdentifier:@”targetViewController”,self];
就可以了,可是我思实例化想使跳转的控制器,然后设置有平性能的值,这样越反后控制器获取很属性,就会见沾值了,可是这样做会发生一个题目:

主界面控制器如果采用了navigatorViewController,并且是那个RootViewController,等到在主界面设置功能,点击某一样成效,想push到一个新页面时,问题便来了,你见面发觉毫无反应,没有报错,只是segue无法跳转。后来到底找到原因:就是自身以登陆控制器跳转时莫采用segue的主意,而是用代码self.storyboard,加载一个新类,具体原理目前尚并未将懂,先把发生题目之代码记录下来,回头加的:

ACCESS 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时,后台打印的输出结果是这么:

ACCESS 7

下一场,我们用以代码判断时使用[NSNull null]来判断,具体如:

ACCESS 8

isEqual:[NSNull null] 就将定矣,nsarray也是一模一样的道理。

 

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

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

ACCESS 9

 

设控制台打印:str =
 <null>,代表在这是一个空字符串,赋值为空,指针是在的,只是内容吧空,这种论断用采取:

if(str is equal [NSNull null ])
,因为于ios上,内容呢空不能够大概的判定str==null(null 以ios上得用[NSNull
null])

ACCESS 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,UITextField密文显示输入内容

ACCESS 11

只是待以TextField属性中的Secure(安全之)勾选上便好了。显示apple默认的密文显示方式。

 

9,通过网自带的NSPredicate使用正则表达式

 

[java] view
plaincopyACCESS 12ACCESS 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文件。

ACCESS 14

一旦齐图所示,添加一个中文的plist

然后打开添加代码:

ACCESS 15

此时段,大功告成。部署在模拟器或真机中吧,你的手机安装(中/英)文语言,它就是见面调用相应的配备文件。

 

11,更改Xcode的缺省公司号称

        

[java] view
plaincopyACCESS 16ACCESS 17

 

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

        在顶峰中履行以下命令:

 

        

[java] view
plaincopyACCESS 18ACCESS 19

 

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

         

[java] view
plaincopyACCESS 20ACCESS 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
plaincopyACCESS 22ACCESS 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的第一只界面:

ACCESS 24

 

 

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

在列蒙补充加如下代码:

//设置背景颜色:

 

[java] view
plaincopyACCESS 25ACCESS 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
plaincopyACCESS 27ACCESS 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
plaincopyACCESS 29ACCESS 30

 

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

这么,背景就可变成想如果的图了。另外,设置大小:

 

 

[java] view
plaincopyACCESS 31ACCESS 32

 

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

 

 

效果图:

ACCESS 33

 

16,如何以档次用代码打开AppStore

[java] view
plaincopyACCESS 34ACCESS 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
plaincopyACCESS 36ACCESS 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
plaincopyACCESS 38ACCESS 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
plaincopyACCESS 40ACCESS 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可以随便定义。

 

ACCESS 42

ACCESS 43

 

CFBundleVersion,标识(发布或者非公布)的内部版本号。这是一个单调增加的字符串,包括一个或者多单秋分隔的平头。

CFBundleShortVersionString  标识应用程序的宣布版本号。该本的版本号是三个秋分隔的整数组成的字符串。第一只整数代表要修改的本,如落实新的意义还是重点变化之考订。第二只整数表示的修订,实现比较突出的特点。第三单整数代表维护本。该键的价不同为“CFBundleVersion”标识。

   图片里之 Version 对应之就算是CFBundleShortVersionString (发布版号
如当前达成架版本为1.1.0  之后你更新的时光可转移吧1.1.1)
   Build 对应之是
CFBundleVersion(内部标示,用以记录出版本的,每次换代的时刻还亟需比上同样赖高
如:当前版是11  下同样不好就使过11 比如 12,13 ….10000)

 

 

21,如何如屏幕一直维持唤醒状态?(就是不自行黑屏)

按,如果我们开一个播视频的成效时,想在播报的时光,不会见活动进入屏保(黑屏)

如若以代码里加入这无异尽:

 

[java] view
plaincopyACCESS 44ACCESS 45

 

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

当然,在思念只要黑屏的时节还得拿它装也NO(比如视频播放完毕时),不然屏幕会以这个软件运行下直接显示在。

 

 

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

ACCESS 46

 表示以版本控制中,自上同样次提交以来,文件举行了改。貌似只有在包含版本控制的项目代码中才见面显示,也就是说你的花色采取了SVN、GIT等工具后,会于Xcode中分辨出。

‘A’  新增

‘D’  删除

‘M’  修改

‘R’  替代

‘C’  冲突

‘I’  忽略

‘?’  未受控

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

 

23,有关ios5高达屏幕旋转,view设置Frame的相关题材

 

屏幕旋转一共有4独相关属性(旋转方向):

 

UIInterfaceOrientationLandscapeLeft

UIInterfaceOrientationLandscapeRight

UIInterfaceOrientationPortrait

UIInterfaceOrientationPortraitUpsideDown

面前片只是横屏时的状态,后少个是正规状态(Portrait)和上下颠倒(UpsideDown)时之状态。

【注意:Left和Right两单左右模拟器旋转时倒的取向正好是反的,但挪后Home的趋向,就假设下图所示】

切实见下图:

ACCESS 47

 

个中涉嫌到少单方法,在ViewController中默认会实现这点子:

 

[java] view
plaincopyACCESS 48ACCESS 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
plaincopyACCESS 50ACCESS 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类型)如下图所示:

ACCESS 52

 

好看来一共发3单view:UILabel 地图view2,添加的view1

我们现只要做的就算是把后双方对调一下,所以于self.view
中寻觅一下拘留起没来replace相关的方法

ACCESS 53

不畏是以此办法,第一独参数是要开展替换的地图view2,第二单参数是调换后显示的view1。

 

 [self.viewexchangeSubviewAtIndex:1withSubviewAtIndex:2];

盖经log打印,我们已经知晓Mapview在率先只下标的位置,view1在亚个下标的职。

ACCESS 54ACCESS 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,如何限制UITextField输入长度(监听textField文本变化之轩然大波)

1、实现UITextFieldDelegate协议;

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

 

[java] view
plaincopyACCESS 56ACCESS 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
功能:

  把textField中职为range的字符串替换为string字符串;

  此函数在textField内容让修改时调用;

返回值:

  YES,表示修改生效;NO,表示未做修改,textField的内容不更换。

参数说明:
  textField:响应UITextFieldDelegate协议的UITextField控件。
  range:    UITextField控件被光标选中的字符串,即被替换的字符串;

        
 range.length为0时,表示于职务range.location插入string。

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

 

 

28,使用ios5.0下的一个方法从定义table View Cell

 

[cpp] view
plaincopyACCESS 58ACCESS 59

 

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

 

ACCESS 60

 

 

29,iOS和iPad各app图标和开行页尺寸

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

iphone 启动页尺寸:大小最好是320X460还是320X480(相当给漫天屏幕尺寸)
单位:pixel 命名:Default.png 

iPad 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)?

ACCESS 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
plaincopyACCESS 62ACCESS 63

 

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

 

思起来navigation的体制了吧,每当我们push到一个viewcontroller时,就会见拿这viewcontroller的实例保存及nsarray里,通过array可以获到任何一个viewcontroller,这不就缓解问题了么?

 

[cpp] view
plaincopyACCESS 64ACCESS 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
plaincopyACCESS 66ACCESS 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
plaincopyACCESS 68ACCESS 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
plaincopyACCESS 70ACCESS 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);  

运转结果:

 

ACCESS 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:iPhone通过,向几独硬件标识符和设施序列号应用中散列算法,而好成这同样标识符。

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
plaincopyACCESS 73ACCESS 74

 

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

 

当得判定屏幕尺寸的地方:

 

[cpp] view
plaincopyACCESS 75ACCESS 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,再编译就无见面出错了.

ACCESS 77

 

40,如何调用系统声音?【iphone 调用系统铃声和感动功能】

先是要在工程里进入Audio Toolbox
framework这个库房,然后以待调用的公文里
#import <AudioToolbox/AudioToolbox.h>

最终当需要播放提示音的地方编写如下代码:

AudioServicesPlaySystemSound(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
plaincopyACCESS 78ACCESS 79

 

  1. 错误代码:  

[cpp] view
plaincopyACCESS 80ACCESS 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在启动过程被全屏显示平张背景图片,比如新浪微博会显示这张:

ACCESS 82

 

假如想以iOS中落实这种效益,毫无压力,非常地概括,把要全屏显示的图形命名也Default.png即可,在iOS
app启动时默认会去加载并全屏显示Default.png。

啊堪为此另外名目来命名图片,在Info.plist配置一下即可:

ACCESS 83

 

布局过后,app启动时虽会去加载并全屏显示lufy.png

于默认情况下,app显示Default.png时绝不真正的”全屏显示”,因为顶部之状态栏并没于藏,比如下面的效应:

ACCESS 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中增加一个配置即可:

ACCESS 85

 

此处的YES表示以app初始化(启动)的时刻便隐藏状态栏。

本,在Default.png显示了后状态栏还是隐藏的。如果想更显示状态栏,补上下面代码即可:

[UIApplication sharedApplication].statusBarHidden = NO; 

 

 

 

 

44,使用ASIHTTPRequest保存cookies

倘若自己的APP,第一软启动请求了登录接口并获得了Cookie,然后我将APP关了,下次起先APP,我莫请登录接口了,那上次得到的Cookie就非有了。如果欲,那么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,UITextField只有当起字符输入后,键盘右下角的寻找/返回/done/等等键才方可用

 

TextField设置这个特性为YES就好了,默认为NO

searchField.enablesReturnKeyAutomatically =YES;

ACCESS 86

 

46,类似QQ等IM软件,长度和高度差的拉气泡的图片是怎么样做的?拉伸?

ACCESS 87

 

实则是一个小气泡png,然后关伸中间有些,四单角不拉动,就是片拉伸。ios自带道,四独角可以免关伸的,如下:

ACCESS 88

 

47,UITableView中产生多独UITextField时,被挡住的TextField如何兑现自动进化弹起?

率先使促成TextField的delegate,在措施:

 

[cpp] view
plaincopyACCESS 89ACCESS 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
plaincopyACCESS 91ACCESS 92

 

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

 

48,ios如何以调试时,轻松找到程序在何崩溃?

咱于协调的工程长一个通用的断点:

ACCESS 93ACCESS 94

ACCESS 95

 

一步步依上面图成功操作。

更运行程序

ACCESS 96

 

自行就断点及此处来了,

log信息是:

 

[cpp] view
plaincopyACCESS 97ACCESS 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
plaincopyACCESS 99ACCESS 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之方格)

 

ACCESS 101

 

 

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

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

 

[cpp] view
plaincopyACCESS 102ACCESS 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
plaincopyACCESS 104ACCESS 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
plaincopyACCESS 106ACCESS 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使用的一模一样种线程保护技术,基本上来讲,是预防以形容不就的时让另外一个线程读取,造成数失实。而这种机制是耗系统资源的,所以当iPhone这种小型设备及,如果没运用多线程间的简报编程,那么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声明一个分子变量,给那个赋值是经常一旦于前面加上”self.”,以便调用成员变量的setmember方法。直接调用成员变量并且为那个赋值:member=[NSString
stringWithFormat:@””];将无履setmember 方法。

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

56,如何给UIbutton 同时安装图片(Image)和文字(Title)以及她的各种状态?

 

[cpp] view
plaincopyACCESS 108ACCESS 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,无法再显示文字。

普通:ACCESS 110高亮:ACCESS 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”];都不起作用,最后才察觉,原来是这么

NSTimeInterval本身是独秒级别之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
plaincopyACCESS 112ACCESS 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
plaincopyACCESS 114ACCESS 115

 

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

 

[cpp] view
plaincopyACCESS 116ACCESS 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
plaincopyACCESS 118ACCESS 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
plaincopyACCESS 120ACCESS 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 崩溃错误

ACCESS 122

比方达到图所示,遇到是似是而非,从字面的意思我们大概会猜到,是出性已被release掉了,但是咱还要以它们了,所以,一统一样管排查把,一定生某个地方的习性提前让release掉了,自己手动管理内存就见面有这样的困恼,代码很多,不思去摸索,一定要是发生耐心,找的长河还可以套到很多知识。

ACCESS 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:

ACCESS 124

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

3.设置完成以后,打开终端,输入“svn
help”,如果出现如下所示,说明命令行工具安装好了。

ACCESS 125

 

62,ios MapKit  判断坐标是否以MapView显示范围外

 

[java] view
plaincopyACCESS 126ACCESS 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
plaincopyACCESS 128ACCESS 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. }  

相关文章