IOS知识点收集

17  duplicate symbols for architecture armv7s

    用cocoapods 的时候出现,这种错误一般是由重复引用库文件引起。

原因:自己尝试添加Reachability的时候,用import ""导入, 发现没又Reachability.h文件,就到link binary with libs里添加了Reachability静态库。

使用cocoapod 文件都是以import <> 方式导入,删掉project里添加的,无需添加,直接引用即可。

 

16  cocoapods error: incompatible character encodings: UTF-8 and ASCII-8BIT. Updating CocoaPods might fix the issue.

  文本文件中的单引号自动变成了中文的单引号,理所当然编码会出现问题。

15 删除添加的代码片段

xcode 中添加了代码片段,要删除的步骤。

1.选中代码片段。 2. 点击键盘delete 键。

14.mutating method sent to immutable object'

 

从字面上理解:可变的消息发给了不可变的对象。比如NSDictionary类型的对象调用setValue方法.应该把NSDictionary 改成NSMutableDictionary类型

 

13。'NSInvalidArgumentException', reason: '+[GMSCameraPosition cameraWithLatitude:longitude:zoom:]: unrecognized selector sent to class

   在build setting 的Other Linker Flags中设置为-ObjC

 

12.The operation couldn’t be completed. (com.google.HTTPStatus error 400.)

在谷歌map api 没设置好。步骤:在developer console中心,

1:将 Google Maps SDK for iOS 的功能打开,

2.申请与你ios项目对应boundle ID 的App Key。

一般app key在申请过程有几个小时才能生效。确定生效后才能调用地图。

11.udp 锁屏 导致出新中断信号

 

今天终于确定了,原来ios在锁屏之后,重新解锁,这个过程会导致socket失效。 之前 的表现就是锁屏,解锁之后,程序直接crash。(其实是解锁之后,发送第一个包,在sendto之后会导致crash)。 

 

目前的解决办法是,重新创建了一个socket,close了之前的。

 

 这好像是因为ios的锁屏和按home键,最终的状态时不一样的, home键会导致程序进入后台,也就是background状态。

 

 

10. self.mapview = [BMKMapView alloc]init]; 报exc_bad_access 错误。

通常这个是因为内存释放导致,但是在百度ios7上出现这个错误。原因是mapapi.bundle 不存在,或者不是最新版本,尝试把mapapi.bundle拖到百度地图sdk中。运行。

 

9. iOS7 xcode5 百度地图Api出现-[__NSCFString stringFromMD5]: unrecognized selector sent to

other linker  flags 添加 -all_load参数。
 Project ->build settings ->linking->Other Linker flags

 

 

8.ios 7兼容

http://diwu.me/2013/09/23/ios7jie-mian-guo-du/

7. UITapGestureRecognizer手势和tableview 触摸选择事件不兼容解决办法。

原因:

  若view 中加了UITapGestureRecognizer手势和tableview ,UITapGestureRecognizer手势调用后,就不会继续往下传递(被拦截),这导致了tableview的点击事件失效。

解决:

  1.手势设置委托方法。

    UITapGestureRecognizer *tap =[[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(btnClicked:)];

    tap.delegate =self;

    tap.numberOfTapsRequired =1;

    [self.viewaddGestureRecognizer:tap];

2.在回调方法中进行判断,若触摸的是tableviewcell的contentview,着不响应。使得事件往下传递。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

{

    // 输出点击的view的类名

    NSLog(@"%@", NSStringFromClass([touch.viewclass]));

    

    // 若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch事件

    if ([NSStringFromClass([touch.viewclass]) isEqualToString:@"UITableViewCellContentView"]) {

        return NO;

    }

    return  YES;

}

 

6"ld: library not found for -l...." 问题的解决

现象:

  在编译工程时,有时会遇到类似“ld: library not found for -l....”的错误提示。

原因:

  通常这是由于工程在编译时找不到需要的链接库而导致的。

解决方法:

  一般可以通过如下方法解决,在工程的Target中选中要执行编译的某个target,然后“get info”,打开Build设置页面,在“Library Search Path”中添加缺失链接库的所在文件夹的路径即可。

 

5.去掉xcode编译warning:ld: warning: directory not found for option '-L

  1. 选择工程, 编译的 (targets)
  2. 选择 Build Settings 菜单
  3. 查找 Library Search Paths 和 Framework Search Paths, 删掉编译报warning的路径即OK

 

 

4.字典转换错误:

-[NSDecimalNumber isEqualToString:]:

用sbjson解析字典时候出现如上错误。原因是字典中的值不是字符串“1”,而是1的数字表示。

要直接得到字符串的形式,在解析后给字典加上描述,如:

[[jsonObjects valueForKey:@"id"] description];

3.图片自适应宽高。

    imageView1.contentMode = UIViewContentModeScaleAspectFit;  
    [self.view addSubview:imageView1];  

2.控件旋转

宏定义 旋转角度 :

#define degreesToRadians(x) (M_PI*(x)/180.0)

CGAffineTransform rotation = CGAffineTransformMakeRotation(degreesToRadians(180));//旋转180度
[xxx setTransform:rotation];

顺便记录一些常量,以后用的着!

#define M_E         2.71828182845904523536028747135266250   e
#define M_LOG2E     1.44269504088896340735992468100189214   log 2e
#define M_LOG10E    0.434294481903251827651128918916605082  log 10e
#define M_LN2       0.693147180559945309417232121458176568  log e2
#define M_LN10      2.30258509299404568401799145468436421   log e10
#define M_PI        3.14159265358979323846264338327950288   pi
#define M_PI_2      1.57079632679489661923132169163975144   pi/2
#define M_PI_4      0.785398163397448309615660845819875721  pi/4
#define M_1_PI      0.318309886183790671537767526745028724  1/pi
#define M_2_PI      0.636619772367581343075535053490057448  2/pi
#define M_2_SQRTPI  1.12837916709551257389615890312154517   2/sqrt(pi)
#define M_SQRT2     1.41421356237309504880168872420969808   sqrt(2)
#define M_SQRT1_2   0.707106781186547524400844362104849039  1/sqrt(2)

 

1.ios 沙盒文件

描述:在对文件进行写入时候出现失败的情况。排查错误,.路径相同,仍然失败,查找到此原因。

沙盒里面的,文件保存的位置分为四个:

 

 

1,工程沙盒里(就是程序user Document文件夹下,以读取文件,写入文件方式)

2,工程自身里(就是在工程里手动创建一个如.plist文件,把固定的内容写入,这个需要人工手动写入,即xxx.app文件)

3,工程沙盒里(保存到user Document下,不过不需要读写文件,用系统的 NSUserDefaults 可以快速保存添加读取删除基本数据类型,类似于android里的Sharedpreferences )

4.tmp文件

要想真正的在app中对程序进行读写,只能把文件放在document,tmp里面。

posted @ 2013-09-23 18:17  time4cnblogs  阅读(638)  评论(0编辑  收藏  举报