iOS开发问题集合

问题一:

原因:
开发中有些页面需要隐藏NavigationBar,有些页面需要显示NavigationBar;在显示和隐藏的页面相互切换时,有时会导致页面错位, 特别是iOS7中,橫划手势返回上一级时取消橫划最容易导致页面错位。

解决方法:
1. 在需要隐藏NavigationBar页面
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:YES animated:NO];
}
2.在需要显示的页面中 -(void)viewWillAppear:(BOOL)animated {
[super viewWillDisappear:animated]; [self.navigationController setNavigationBarHidden:NO animated:YES];
}
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated]; [self.navigationController setNavigationBarHidden:YES animated:YES];
}
3.某些基于self.view.frame.size.height(视图高度)来定位坐标位置时,需要减去navigationBar的 坐标+高度;
如一个距离宽70、高70,距离底部15像素的一个视图,设置它的Y:
Y = self.view.frame.size.height - 70.f - 15.f - (self.navigationController.navigationBar.frame.origin.y + self.navigationController.navigationBar.frame.size.height);

问题二:

添加KISXML库时报self->isa = [DDXMLDocument class]; ‘isa’ is deprecated
原因:由于KISXML库停止更新一段时间,添加KISXML库时会报错,self->isa = [DDXMLDocument class]; ‘isa’ is deprecated
解决方法:
1.在报错.m文件中 加入 #include
2.把self->isa = [DDXMLDocument class]; 替换成 object_setClass(self, [DDXMLElement class]);

问题三:

原因:移植主站代码时 报错:implicit declaration of function ‘AFQueryStringFromParametersWithEncoding’ is invalid in C99 [-Werror,-Wimplicit-function-declaration]
解决方法:把 Build Settings 中 C Language Dialect GNU99[-std=gnu99] 改为GNU89[-std=gnu89]

问题四:

原因:移植sdwebimage 会报clang: error: no such file or directory: ‘/UsersDownloads/SDWebImage-master/Vendors/libwebp/src/utils/random.c’ clang: error: no input files;webp是谷歌发明的图片格式,sdwebimage为了支持所有图片格式加上的;
解决方法:
1.删掉webp库
2.删除UIImage+WebP.h UIImage+WebP.m
3.删除#ifdef SD_WEBP {}#endif之间包含的代码

问题五:

原因:提交失败(细节如下): 至少有一个属性变更失败;版本库未改变
 设置属性 “log” 出错: Could not execute PROPPATCH.
解决方法:因为log信息copy自别的文档,隐藏了一些特殊字符,删除空格字符或者重新填写;

问题六:

原因:Xcode 5之后想删除多余的描述文件;
解决方法:
在Finder中 前往 : ~/Library/MobileDevice/Provisioning Profiles 删除相应描述文件即可

问题七:

原因:报错:Terminating app due to uncaught exception ‘CALayerInvalidGeometry’, reason: ‘CALayer position contains NaN:
解决方法:
1.忘记给webview设置frame,然后就出现了CALayerInvalidGeometry’, reason: ‘CALayer position contains NaN:的问题;或者webview 高度初始值为0 导致的;
2.storyboard中ViewController的frame设置中width、height属性被设置为0造成的。另外,若是在程序代码中把某个View的frame的width、height属性设置为0有可能也会引起以上错误。
3.某些地方代码除以0,如UIView 的frame计算,width为0时,计算用到ivar/frame.size.width;

问题八:

原因:使用 SDWebImage时,SDWebImage库直接把图片全部缓存在内存,重用的tableviewcell越刷内存占用越多。
解决方法:要做合适的时候调用clearMemory方法;因为这些缓存都是放在memCache里;
- (void)clearMemory{
[self.memCache removeAllObjects];
}

问题九:

原因:uplicate symbols for architecture i386 或者 duplicate symbols for architecture armv7 或者
duplicate symbols for architecture armv7s或Undefined symbols for architecture i386:
解决方法:下边出现的编译bug,不仅仅使用百度地图,但是加入第三方框架、静态库等都有可能出现
1. duplicate symbols for architecture i386 或者 duplicate symbols for architecture armv7 或者
duplicate symbols for architecture armv7s

这一类,属于冲突,一般来说是类冲突,就是说你加入的静态库和原来项目有相同的类,
解决办法,仔细看看编译错误的详细说明,到底是哪个类冲突。
很多情况下是因为 你加入的两个外部框架(或者静态库)或者你自己的工程,同时都是使用了jsonkit这个框架,这就出现相同的类。这就是冲突。
相同的类只能只能有一个,只能更改自己项目的冲突类。

2.Undefined symbols for architecture i386:
说明缺少某种框架,或者类。
根据提示进行添加某些框架或者类。

参考链接:
http://blog.sina.com.cn/s/blog_8aecea5f0101cd63.html
http://hi.baidu.com/konary/item/37f41746ef3a4c04e8350490
问题十:

原因:xcode 6取消了 Empty Application 模板,让一些喜欢使用代码写UI的程序猿无可奈何;
解决方法: 1、删掉工程中main.storyboard 后要删除plist文件中对应的键值,否则会报如下错误: Could not find a storyboard named ‘Main’ in bundle NSBundle
IOS开发问题集合
2、删除main.storyboard后,需要在AppDelegate.m中初始化一个window进行使用,否则应用程序没有window可用。
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.

self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];

问题十一:

原因:iOS 7 UITableView 在页面只有这一个视图时 会出现一半空白区域;headerview不能从0开始;
解决方法: if (IS_iOS7) {
self.automaticallyAdjustsScrollViewInsets = NO;

}

问题十二:

原因:写[self performSelector:@selector(test) withObject:nil afterDelay:2.f];一定要记得remove要不会产生很多诡异问题;
解决方法:[NSObject cancelPreviousPerformRequestsWithTarget:self];
问题十三:

原因:MJRefreshHeader 当前视图不显示时,不会走刷新是问题调用beginRefreshing方法
- (void)beginRefreshing
{
if (self.window) {
self.state = MJRefreshHeaderStateRefreshing;
} else {
self.state = MJRefreshHeaderStateWillRefresh;
}
}
- (void)drawRect:(CGRect)rect
{
if (self.state == MJRefreshHeaderStateWillRefresh) {
self.state = MJRefreshHeaderStateRefreshing;
}

}由于当前视图不显示,所以不会调用drawRect方法,state一直是MJRefreshHeaderStateWillRefresh这个状态,默认不做任何处理,所以不会刷新;

解决方法:当前VC不显示,收到PUSH需要刷新页面时,
if (self.window) { //解决当前视图不window上(最上层时)MJRefreshHeader不刷新问题;
[self.tableView.header beginRefreshing];
}else{
[self.tableView.header setState:MJRefreshHeaderStateRefreshing];
}

你可能感兴趣的:(iOS开发问题集合)