关闭

iOS 开发疑难杂症

233人阅读 评论(0) 收藏 举报

问题一:

  • 原因:
开发中有些页面需要隐藏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  删除相应描述文件即可

问题七:

  • 解决方法:
  • 1.忘记给webview设置frame,然后就出现了CALayerInvalidGeometry', reason: 'CALayer position contains NaN:的问题;或者webview 高度初始值为0 导致的;

    2.storyboardViewControllerframe设置中widthheight属性被设置为0造成的。另外,若是在程序代码中把某个Viewframewidthheight属性设置为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];

              }

     

    问题十四:

    • 原因:NSTimer 结束时 执行[[Timer invalidate]; 有可能会再执行一遍 timer里的轮询方法;

     

    • 解决方法:保险起见加个变量判断;
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3095次
    • 积分:77
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条