iOS项目支付中的知识点与问题收集整理②(Part 二)

1、点击UIButton 不能发生触摸事件   

假诺在UIImageView中添加了一个按钮,你会意识在默认情状下那么些按钮是无能为力被点击的,需要设置UIImageView的userInteractionEnabled为YES:

imageView.userInteractionEnabled =
YES;
安装为YES后,UIImageView内部的按钮就足以被点击了
 

2、怎么着启动app时全屏展现Default.png(图片)?  

多数app在启动过程中全屏呈现一张背景图片,比如知乎微博会显示这张:
图片 1

要想在iOS中实现这种效能,毫无压力,相当地大概,把需要全屏呈现的图片命名为Default.png即可,在iOS
app启动时默认会去加载并全屏呈现Default.png。

也足以用别样名目来定名图片,在Info.plist配置一下即可:
图片 2

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

在默认情形下,app显示Default.png时不要真的的”全屏显示”,因为顶部的景观栏并没有被埋伏,比如下面的意义:
图片 3

大部情形下,我们都想隐藏状态栏,让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中追加一个配备即可:
图片 4

这边的YES表示在app先导化(启动)的时候就隐藏状态栏。

当然,在Default.png彰显完毕后状态栏仍然隐藏的。如果想重新显示状态栏,补上下面代码即可:

[UIApplication
sharedApplication].statusBarHidden = NO;

3、使用ASIHTTPRequest保存cookies   

只要我的APP,第一次启动请求了登录接口并得到了Cookie,然后我把APP关了,下次开行APP,我不请求登录接口了,

这上次得到的库克(Cook)ie就不设有了。假诺需要,那么2种方法,下次开行app,自动登入,这样能得到服务器分配给您的cookier

(这一种是最好的,因为session也会晚点),还有一种是你把上次登入的时候,拿到的cookier存起来,然后下次起动app的时候,

手动给请求(ASIHTTP)添加cookie。所以当第一次登录成功后,可以把cookie保存到CoreData,SQLite,UserDefault等,

及至下次网络请求时,读取: 

图片 5图片 6

1  ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:UserInfoURL];
2 [request setRequestMethod:@"POST"];
3  [request addRequestHeader:@"Cookie" value:[NSString stringWithFormat:@"cookie=%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"cookie"]]];
4 //把cookie的值放进Header里,这个cookie的值是一串很长的字符串。 

View Code

4、设置UITextField(Field)唯有当有字符输入后,键盘右下角的搜寻/再次来到/done/等等键才得以应用  

TextField(Field)设置这些特性为YES就足以了,默认为NO

searchField.enablesReturnKeyAutomatically
=YES;
图片 7

5、类似QQ等IM软件,长度和可观不等的拉扯气泡的图纸是肿么办的?拉伸?  

图片 8
实在是一个小气泡png,然后拉伸中间有些,五个角不拉动,就是一些拉伸。ios自带方法,六个角可以不拉伸的,如下:

图片 9

6、UITableView中有三个UITextField时,被遮挡的Text菲尔德(Field)怎样贯彻自动进化弹起?   

第一要促成Text菲尔德(Field)(Field)的delegate,在点子: 
 

图片 10图片 11

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

View Code

这表明当初步输入时,tableview在原本的功底上更上一层楼抬起70个离开。三个UITextFiled能够因而判断来使用CGPoint的调动低度,我这写的是70.
tableview的scrollEnabled属性一定如若YES;要不然滚动不了了。
记得在return时复原tableview的位置:
 

图片 12图片 13

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

View Code

7、ios如何在调试时,轻松找到程序在哪儿崩溃?  

咱俩给协调的工程添加一个大局的断点:
图片 14 

一步步按下面图成功操作。
再运行程序
图片 15
自动就断点到这里来了,
log信息是:

2013-05-20 11:14:19.635 GestureRecognizer[1491:c07] -[__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x7a88df0  
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函数去。

8、UIImageView 咋样实现windows 桌面类似的背景壁纸屏幕(很小的图样会显得N五个)? 

从UImageView上找ContentMode或clipToBounds是都不管用的,正确的办法是,不用UImageView,使用UIView,然后设置backgroundColor属性为我们的图纸,这样的话自动会以屏幕的主意显示。

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的方格)
图片 16

9、UITableViewCell 的backgroundColor不起效率的题目?   

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

图片 17图片 18

 1 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{  
 2       
 3   //省略....   
 5     cell.textLabel.font = [UIFont systemFontOfSize:6.0];  
 6     cell.textLabel.text = @"13832207020";  
 7  
 8     if (indexPath.row==0) {   
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 }   

View Code 

这样的话,第1行cell就活该是我们设置好的颜色,不过请小心,此方法在UITableViewStylePlain的风骨下有效,在
UITableViewStyleGrouped的体制下是不行的!这多少个跟tableview的backgroundView和backgroundColor是不曾关系的,个人臆想应该是在Grouped风格下,cell选中的颜色有系统的view遮罩,导致我们设置的一筹莫展呈现出来。
【补充】如果想在reload或init时设置tableview的某一cell为
selected状态,千万不要采用cell
setSelected:YESanimated:YES,使用tableview的法门:

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

10、UITableViewCell选中时contentView中各组件的高亮状态   

采用系统或简捷自定义的UITableViewCell时,当选中某一行Cell后,除了背景颜色改变外,Cell上有着的组件(数据)比如UILabel,UIbutton等都被机关呈现成了其

Highlighted(高亮)状态下的法力,(如若想呈现出效果,你的那一个自定义的零部件必须要设置高亮状态,比如highlightedTextColor,UIControlStateHighlighted等),

就此这点索要特别注意,假如不想要系统的这多少个活动特效,有多少个解决办法:

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

2,若是自定义的Cell:

图片 19图片 20

 1 - (void)setSelected:(BOOL)selected animated:(BOOL)animated  
 2 {   
 4     [super setSelected:selected animated:animated];   
 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     }   
16 }     

View Code

11、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是一个百般好的选料。

       
提议访问器不是原子操作,而默认地,访问器是原子操作。这也算得,在多线程环境下,解析的访问器提供一个对性能的广元访

       
 问,从获取器得到的重临值或者经过设置器设置的值可以五遍成功,即使是其余线程也正在对其进展走访。假设您不指定
nonato

       mic,在 自己管理内存的条件中,解析的访问器保留并机关释放重临的值,假使指定了
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函数被调用,内存被回收。  

12、#pragma mark -#pragma mark Initialization含义  

它们告诉Xcode编译器,要在编辑器窗格顶部的措施和函数弹出菜谱中校代码分隔开;注意
#pragma mark – 的“-”前边不可能有空格。如若你的标志没有

出现在弹出菜谱中,比如没有分隔线出现,请在Xcode菜单
“Preferences..”中的 “Code Sense”选项撤消选中”Sort
listalphabetically”即可。

13、自定义delegate变量评释时行使assign依旧retain?   

俺们透过发送消息给目的出发特定动作;对象发送某些变化的时候经过回调函数(callback)公告我们。对象在特定事件发生的时候,就会调用对应的回调函数,

接触业务逻辑。回调函数通过所谓的代办(Delegation)来贯彻.

delegate使用方法:

@property (assign)
<id>xxxDelegate delegate;

 
正确的使用模式是应用assign属性而不是retain。之所以对于delegate这类对象使用assign而不是用retain是为着以防循环retain(retain
loop)

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

接纳@property和@synthesize注明一个成员变量,给其赋值是时要在前头加上”self.”,以便调用成员变量的setmember方法。直接调用成员变量并且给其赋值:

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

15、怎么样给UIbutton 同时安装图片(Image)和文字(Title)以及它们的各类意况? 

图片 21图片 22

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];  

View Code

代码中自我设置button背景图片为温馨定义的一个regionImage,并安装了button的title
= “2013-08-01
07:00”【注意,设置了背景图片后,title只可以如此充裕,以button.titleLabel.text方式添加会不可能显示的】,并且安装了tiitle正常和高亮下文字颜色。
故而见到此间,应该领会button.setBackgroundImage
和 set Image
的区别了吧,前者是可以而且安装文字,后者是只要设置了image,不能再展现文字。

普通:图片 23高亮:图片 24
 

16、咋样将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即可得到毫秒级另外刻钟差 

图片 25图片 26

1 //为了兼容java版本,事件是从1970/1/1开始
 2 
 3 -(NSDate *)getDateTimeFromMilliSeconds:(long long) miliSeconds 
 5 { 
 7     NSTimeInterval tempMilli = miliSeconds;
 8 
 9     NSTimeInterval seconds = tempMilli/1000.0;
10 
11     NSLog(@"seconds=%f",seconds);
12 
13     return [NSDate dateWithTimeIntervalSince1970:seconds];  
15 }
16 
17 
18 
19 //将NSDate类型的时间转换为NSInteger类型,从1970/1/1开始
20 
21 -(long long)getDateTimeTOMilliSeconds:(NSDate *)datetime 
23 { 
25     NSTimeInterval interval = [datetime timeIntervalSince1970];    
26 
27     NSLog(@"interval=%f",interval);
28 
29     long long totalMilliseconds = interval*1000 ;
30 
31     NSLog(@"totalMilliseconds=%llu",totalMilliseconds);
32 
33     return totalMilliseconds;    
35 } 

View Code

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

图片 27图片 28

 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];   

View Code 

17、ios中的全局静态变量  

Objective-C
补助全局变量
一言九鼎有二种实现形式:
(1)第一种和C/C++中的一样,
使用”extern”关键词;
(2)此外一种就是使用单例实现。

(比如我们平时会把一个变量放在AppDelegate里面作为全局变量来访问,
其中AppDelegate就是一个单例类)

在Objective-C中咋样落实像C++中这样的静态成员变量呢?
你需要做的是在一个类A的implementation(.m或者.mm)文件中定义一个static变量,然后为A类定义静态成员函数(class
method,也就是类措施)来操作该变量。  

图片 29图片 30

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

 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    

View Code

上边的例子中您就足以因此[Example
instanceCount]对静态变量count举办走访,无须创造实例。
警戒:  static
写在interface外面编译是从未有过错误的,然则编译器会报警告,这么说这么的写法是不被编辑器认同的。
谬误:static
写在interface里面会间接报错,显著这样的语法是不被认同的。

static关键字表明的变量必须放在implementation外面,或者措施中,假设不为它赋值默认为0,
它只在程序开机最先化两次。

18、如何接纳 NSNotificationCenter 在viewcontroller之间举行传值? 

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

sendViewcontroller.m
 

图片 31图片 32

 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];  
10 SettingViewController.m(接收值的viewcontroller)



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

View Code

这般就兑现了主题的行使,跟delegate类似,注意
addObserver时,需要写目的viewcontroller的实例,而不是self。 

19、Thread EXC_BAD_ACCESS : objc_retain, objc_getProperty 崩溃错误 

图片 33

如上图所示,遭受这么些错误,从字面的情致我们大约能猜到,是有总体性已经被release掉了,可是我们又采纳它了,所以,一部一部排查把,一定有某个地方的性能

提前被release掉了,自己手动管理内存就会有诸如此类的困恼,代码很多,不想去找,一定要有耐心,找的过程还足以学到很多知识。
图片 34

如上图,这么些就是自己找到的原因所在,unarchiver
release掉了,而我辈在任何的类中想利用location的性质。  

20、MAC 终端(bash)svn命令不识别 command not found   

在mac os 10.8中,svn Command
line tools是一向不自行安装的,这样的话,svn
命令行就会失灵,解决办法:
1.开辟xcode偏好设置(comand+,)–>”Download”
–>Components:
图片 35

2.点击“Command line
tools”下载,下载完成未来安装。

3.设置到位之后,打开终端,输入“svn
help”,假诺出现如下所示,表达命令行工具安装好了。
图片 36

 21、ios Map基特(Kit)  判断坐标是否在MapView彰显范围内    

图片 37图片 38

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 }   

View Code 

22、在App图标上显得数字徽标

IOS7 : 

1  UIApplication *app = [UIApplication sharedApplication];  
2           
3  // 应用程序右上角数字  
4  app.applicationIconBadgeNumber = 99;   

下边的代码可以搞定 

IOS8:

iOS8中设置application badge
value 会抛错:Attempting to badge the application icon but haven’t
received permission from the user to badge the

原因是因为在ios8中,设置使用的application
badge
value需要拿到用户的特许。使用如下方法咨询用户是否认同使用设置application
badge value

UIUserNotificationSettings
*settings = [UIUserNotificationSettings
settingsForTypes:UIUserNotificationTypeBadge categories:nil];

[[UIApplication sharedApplication] registerUserNotificationSettings:settings];

在这前边要一口咬定系统是否为iOS8的系统,否则8事先的系统会报错。

图片 39图片 40

1  UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];  
2           
3  [[UIApplication sharedApplication] registerUserNotificationSettings:settings];  
4           
5  UIApplication *app = [UIApplication sharedApplication];  
6     // 应用程序右上角数字  
7     app.applicationIconBadgeNumber = 10;  

View Code

注意:清除数字请将数字设置为
0

1-2装置标签栏按钮展现数字图标

图片 41图片 42

1 UIViewController *second=[SecondViewController new];
2 UITabBarItem *item=[[UITabBarItem alloc]initWithTitle:@"支付" image:[UIImage imageNamed:@"008"] selectedImage:[UIImage imageNamed:@"002"]];
3     second.tabBarItem=item;
4     item.badgeValue=@"20";

View Code 

职能如图

图片 43
 

23、咋样取得手机硬件信息?  

透过动用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:BlackBerry通过,向多少个硬件标识符和装置连串号应用内部散列算法,而生成这一标识符。
http://blog.csdn.net/qiwancong/article/details/7914923
参考 

24、设置隐藏头部状态栏(电池图标)

1-1
设置情况  如图

图片 44

1-2添加代码:

1 //隐藏状态栏
2 [[UIApplication sharedApplication]setStatusBarHidden:YES];

贯彻效益 如图

图片 45

25、依据App版本号来判定App开启时是否进入指导页 

兑现代码

图片 46图片 47

 #define __kFirstVersion @"kFirstVersion"
 1 //根据App版本号来判断App开启时是否进入引导页
 2 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
 3        
 4     //1.获取一个状态:是否已经进入过主界面
 5 //    BOOL b = [[[NSUserDefaults standardUserDefaults]valueForKey:__kFirst] boolValue];
 6     
 7     //获取到当前的版本
 8     NSString *key = (NSString *)kCFBundleVersionKey;
 9     NSString *version = [NSBundle mainBundle].infoDictionary[key]; 
10     
11     //获取到之前的版本
12     NSString *lastVersion = [[NSUserDefaults standardUserDefaults]valueForKey:__kFirstVersion];
13     
14     //2.如果没有进入过主界面,则进入引导页
15     //如果两个版本号相同,则进入主界面,否则进入引导页
16     if (![lastVersion isEqualToString:version]) {  
18         ViewController *vc = [[ViewController alloc]init]; 
20         [vc setCallback:^{
21             [self startApp];
22             [[NSUserDefaults standardUserDefaults]setValue:version forKey:__kFirstVersion];
23             [[NSUserDefaults standardUserDefaults]synchronize];
24         }]; 
26         self.window.rootViewController = vc;
27     }
28     //3.如果已经进入过主界面,则直接进入主界面
29     else
30     {
31         [self startApp];
32     }
33     return YES;
34 }
35 
36 
37 -(void)startApp
38 {
39     self.window.rootViewController = [[UINavigationController alloc]initWithRootViewController:[RootViewController new]];
40 } 

View Code

26、总计文本内容所占空间大小方法

1)对于单行文本数据的显得调用-
(CGSize)sizeWithAttributes:(NSDictionary
*)attrs;方法来赢得文本宽度和中度。

例如:

  //根据文本内容取得文本占用空间大小
 CGSize textSize=[@"Hello World" sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:15]}];

 2)对于多行文本数据的来得调用-
(CGRect)boundingRectWithSize:(CGSize)size
options:(NSStringDrawingOptions)options attributes:(NSDictionary
*)attributes context:(NSStringDrawingContext *)context
;方法来得到文本宽度和可观;同时注目的在于此在此之前需要安装文本控件的numberOfLines属性为0。
 

 例如:

图片 48图片 49

1 //计算多行文本所占空间大小
2 CGSize textSize=[@"Hello WorldHello WorldHello WorldHello WorldHello WorldHello WorldHello World" boundingRectWithSize:CGSizeMake(100, MAXFLOAT)
3 options:NSStringDrawingUsesLineFragmentOrigin 
4 attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:15]} context:nil].size; 

View Code

 27、图解 imagView 的 UIContentMode的展现情势 如下图

图片 50

 

28、解决view的缩放的时候,layer.border.width(圆角边框)随着view的放大时会出现锯齿化的题材。

self.layer.allowsEdgeAntialiasing = YES;

29、Xcode 7中http通信出现如下错误:Application Transport Security has blocked a cleartext HTTP (http://)

   resource load since it is insecure. Temporary exceptions can be configured via your app’s Info.plist file.

原因:

在iOS9
中,苹果将原http协议改成了https协议,使用 TLS1.2
SSL加密请求数据。

缓解格局:

编制
Info.plist,参加如下设置:NSAppTransportSecurity 
—-> NSAllowsArbitraryLoads

如图:

图片 51

30、报错: You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE)(解决方案)

缓解格局有两种:

方法一:使用Enable
Bitcode的第三方库

主意二:将工程中的Enable
Bitcode设置为NO 如图:

图片 52 

31、Xcode SVN  报错 The server certificate failed to verify. 解决办法

开辟终端(实用工具
–>终端),在顶峰中输入如下命令:
svn ls https://xxxxxxxx/svn/xxxxxx   SVN的路径
下一场径直输入 “ p ” 
确认,再分别输入总括机密码、svn用户名以及密码;就足以另行连接了。

32、ios修改textField的placeholder的字体颜色、大小 方法

图片 53图片 54

1 textField.placeholder = @"username is in here!";  
2 [textField setValue:[UIColor redColor]forKeyPath:@"_placeholderLabel.textColor"];  
3 [textField setValue:[UIFont boldSystemFontOfSize:16]forKeyPath:@"_placeholderLabel.font"];   

View Code

33、iOS获取当前根视图控制器并实现页面跳转的法子

图片 55图片 56

 1 - (UIViewController*)topViewController
 2 {
 3     return [self topViewControllerWithRootViewController:self.window.rootViewController];
 4 }
 5 
 6 - (UIViewController*)topViewControllerWithRootViewController:(UIViewController*)rootViewController
 7 {
 8     if ([rootViewController isKindOfClass:[UITabBarController class]]) {
 9         UITabBarController *tabBarController = (UITabBarController *)rootViewController;
10         return [self topViewControllerWithRootViewController:tabBarController.selectedViewController];
11     } else if ([rootViewController isKindOfClass:[UINavigationController class]]) {
12         UINavigationController* navigationController = (UINavigationController*)rootViewController;
13         return [self topViewControllerWithRootViewController:navigationController.visibleViewController];
14     } else if (rootViewController.presentedViewController) {
15         UIViewController* presentedViewController = rootViewController.presentedViewController;
16         return [self topViewControllerWithRootViewController:presentedViewController];
17     } else {
18         return rootViewController;
19     }
20 } 
21 
22 //调用
23 [[self topViewController] presentViewController:[[TransViewController alloc] init] animated:YES completion:nil]; 

View Code

 34、全局变量宏定义实现格局  

图片 57图片 58

1 #define APPDELEGATE ((AppDelegate *)[UIApplication sharedApplication].delegate)

 2 //用法:在AppDelegate.h中定义变量 通过 APPDELEGATE对象实现全局调用
 3 
 4 //AppDelegate.h 代码
 5 #import <UIKit/UIKit.h> 
 6 @interface AppDelegate : UIResponder <UIApplicationDelegate> 
 7 @property (strong, nonatomic) UIWindow *window; 
 8 @property (strong,nonatomic) NSString *systemName;
 9 @end
10 
11 //调用方法 (注意得引用头文件 AppDelegate.h)
12  APPDELEGATE.systemName=@"KingKong";  

View Code

35、解决MJExtension 转换字段为id(关键字)的问题处理

图片 59图片 60

 1 #import "HGProductModel.h"
 2 #import "MJExtension.h"
 3 @implementation HGProductModel  
 4 
 5 //重写 replacedKeyFromPropertyName 方法将id替换为我们定义的字段名
 6 + (NSDictionary *)replacedKeyFromPropertyName
 7 {
 8     return @{@"productID" : @"id"};
 9 }  
10 @end  

View Code

36、tableviewcell上按钮点击时确定当前所在行的措施

看似这种按钮:

图片 61

图片 62图片 63

 1 -(void)btnClicked:(id)sender event:(id)event
 2 
 3 {
 4 
 5   NSSet *touches =[event allTouches];
 6 
 7   UITouch *touch =[touches anyObject];
 8 
 9   CGPoint currentTouchPosition =[touch locationInView:self.tableView];
10 
11   NSIndexPath *indexPath =[self.tableView indexPathForRowAtPoint:currentTouchPosition];
12    
13    UITableViewCell *cell=[self tableView:tableView cellForRowAtIndexPath:indexPath];
14 
15 }  

View Code

37、设置UItableViewCell 左边小箭头

  cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;

38、UILabel 文字呈现删除线办法 如图:

图片 64

图片 65图片 66

1 NSString *bottomStr=[NSString stringWithFormat:@"原价%@",model.standardPrice];
2 NSMutableAttributedString *attrString=[[NSMutableAttributedString alloc]initWithString:bottomStr];
3 [attrString addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlinePatternSolid | NSUnderlineStyleSingle] 
4 range:NSMakeRange(0, bottomStr.length)];
5 self.bottomLb.attributedText=attrString; 

View Code

39、xxx文件 is missing from working copy 解决方法

图片 67

釜底抽薪方案:
1.开辟终端
2.cd
到警示所指示的文件夹下
3.执行命令svn rm --force 丢失文件的名称4.回车

  1. find .
    -type d -name .svn | xargs rm -rf //该命令为直接删除指定文件夹下所有SVN相关
  2. sudo find /Users/KingKong/Desktop/Scitel_Project/iOS-BigEvent/
    -name “.svn” -exec rm -r {} \;//灰色字体为品种路线 

40、解决 UITableView 等UI控件下移的题材

图片 68图片 69

1.//下方显示不全 
_tableView.contentInset=UIEdgeInsetsMake(0, 0, -20, 0);   

2、//其他UI控件下移复位处理 
self.navigationController.navigationBar.translucent = NO;  

self.edgesForExtendedLayout = UIRectEdgeNone; 

self.automaticallyAdjustsScrollViewInsets = YES;

self.extendedLayoutIncludesOpaqueBars = YES;

View Code 

41、UITableView 复用时落实修改FooterView背景观方法

- (void)tableView:(UITableView *)tableView willDisplayFooterView:(UIView *)view forSection:(NSInteger)section {
    view.tintColor = HGTableViewBackColor;
} 

42、修改UIProgressView 中度的法门

CGAffineTransform transform = CGAffineTransformMakeScale(1.0f, 5.0f);
self.progressView.transform = transform;

需要导入CoreGraphics.framework包

43、根据index(下标)获取TableViewCell 

1 NSIndexPath *indexPath =  [NSIndexPath indexPathForItem:i inSection:0];
2 UITableViewCell *cell =  [self.tableView cellForRowAtIndexPath:indexPath]; 

44、iOS 中 _OBJC_CLASS_$_xxxx 问题解决方案

错误代码:

Undefined symbols for
architecture x86_64:

 
“_OBJC_CLASS_$_QQApiInterface”, referenced from: 

      objc-class-ref in
AppDelegate.o

 
“_OBJC_CLASS_$_ShareSDK”, referenced from:

      objc-class-ref in
AppDelegate.o

      objc-class-ref in
RecipeDetailViewController.o

      objc-class-ref in
showViewController.o

      objc-class-ref in
video_show.o

 
“_OBJC_CLASS_$_TencentOAuth”, referenced from:

      objc-class-ref in
AppDelegate.o

  “_OBJC_CLASS_$_WXApi”,
referenced from:

      objc-class-ref in
AppDelegate.o

 
“_OBJC_CLASS_$_WeiboApi”, referenced from:

      objc-class-ref in
AppDelegate.o

  “_OBJC_CLASS_$_YXApi”,
referenced from:

      objc-class-ref in
AppDelegate.o

ld: symbol(s) not found for
architecture x86_64

clang: error: linker command
failed with exit code 1 (use -v to see invocation) 

原因:

  
Xcode升级到6.1.1或以上版本后 默认让所有App都通过64位编译器编译。原来在Xcode6.1.1以下版本的时候默认的

 
Architectures唯有(arm7,armv7s),到6.1.1或以上版本默认就带上arm64的参数了。

方法:

1.把1.选中Targets—>Build
Settings—>Combined—>Architectures。

把build active architectures
only 改为 NO。

  1. 把最下面的Valid
    Architectures中的arm64参数删掉就足以了

   或者:

双击Architectures,选择other,删除$(ARCH_STANDARD),然后扩展armv7和armv7s(写上:$(ARCHS_STANDARD_32_BIT))。

3.clean 再build。

设置好后效果图:

图片 70

 

45、Xcode更新到7.3后会出现NSObject+MJProperty.h报Cannot create __weak reference in file using manual reference counting错误

化解的点子:

在Build Settings—->Aplle LLVM7.1 –
Language – Objectibe-C

—->Weak Reference In Manual Retain
Release 设置为YES

46、清理Xcode中剩下的开支证书方法

即此处呈现的证件

图片 71

进入此目录 ~/Library/MobileDevice/Provisioning Profiles
删除相应的证件即可。 

47、解决no index path for table cell being reused 问题

 问题原因是:我用nib自定义了一个cell。作为我的tableHeaderView.当然在我执行下面的这段代码的时候,tableHeaderView

 的来得没有其余问题。

headCell = [[NSBundle mainBundle] loadNibNamed:@"RRTableHeadBtnCell" owner:self options:nil][0];
self.tableView.tableHeaderView = headCell;

而是:当自家有数据需要立异cell的时候,当自身要进行上边的代码的时候,标题的error就涌出了。而且我的tableFootView
也还要毁灭了。

 [self.tableview reloadSections:[NSIndexSet  indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationFade];  

题材是出于将cell作为section
headerView 导致的题目所述错误。

解决方案其实很简单:

 self.tableView.tableHeaderView = headCell.contentView;

48、Xcode 打开项目一贯显示Indexing… 解决办法 

Xcode用得久了,代码中类和艺术等字体颜色不擢升,文件失去关联,command+左键出现symbol
not found。

 defaults write
com.apple.dt.Xcode IDEIndexDisable 1  
这可以缓解Xcode一直处于indexing状态; 

  *
需要时候,把1改为0就足以了:  defaults write com.apple.dt.Xcode
IDEIndexDisable 0    这样你的Xcode就

可以正常代码指示了
  当然,这还有可能是因为工程索引文件被破坏导致,可通过以下方法解决:

1)、Xcode
-> Organizer -> Projects ->把持有工程中的Derived Data
删除Delete掉。

2)、进入~/Library/Developer/Xcode/DerivedData
这些文件夹,把里面相关工程的公文夹删掉。

49、iOS修改UIStatusBar 文字颜色方法

1)、在plist里增添一行
UIStatusBarStyle(或者是“Status bar
style”也得以),这里可以安装五个值,

 UIStatusBarStyleDefault
(默认粉黑色)和 UIStatusBarStyleLightContent
(白色),同时务必在plist中添加

View
controller-based status bar appearance 设置NO;
此方法只对iOS7随后的操作可行。

50、 真机调试弹出 “Mac OS X”想要举办改动。键入管理员的名号和密码以允许实施此操作(“Mac OS X”想接纳系统钥匙串)

解决办法:

开拓钥匙串访问采用系统下相应的证书点开双击,将访问控制项改成到允许持有应用程序访问此项目,输入一遍密码即可,

从此未来就不会弹出了!

 

51、Xcode8代码出现输出ubsystem: com.apple.UI基特(Kit), category: HID伊夫ntFiltered, enable_level: 0 …

解决办法:【Product】-【Scheme】-【Edit
Scheme】-【Run】-【Argument】-【Environment Variable】

添加keyValue【OS_ACTIVITY_MODE  
disable】可以告一段落输出打印此日志

图片 72

 52、实现在一个viewcontroller上加载另一个viewcontroller方法

[self addChildViewController:otherVC];
[self.view addSubview:otherVC.view];

 53、解决Xcode8 打开Xib文件后Xcode7 不能开拓并编译的题目

图片 73图片 74

 修改如上图五个地点即可。

54、打包Framework中一旦存在Category 造成在引用时崩溃的缓解措施

在引用时需要在工程中的
Build Settings —-> other linker flags中添加 -ObjC
即可。

 

 

 >>>>>>>>>>第一部分<<<<<<<<<<<<

相关文章