iOS开发---- 开发错误汇总及解决方法

本文转载至 http://blog.csdn.net/shenjx1225/article/details/8561695

一、今天调试程序的时候,出现了一个崩溃,信息如下:

2013-02-01 09:05:23.929 SD4iPhone[627:c07] *** Terminating app due to uncaught exception ‘NSInternalInconsistencyException‘, reason: ‘Invalid update: invalid number of sections.  The number of sections contained in the table view after the update (5) must be equal to the number of sections contained in the table view before the update (5), plus or minus the number of sections inserted or deleted (0 inserted, 1 deleted).‘

*** First throw call stack:

(0x2424052 0x961d0a 0x23cca78 0x14822db 0x18d4257 0x18df518 0x18df593 0x9699b58 0x12111 0x2425e72 0x14119ef 0x23f897f 0x235bb73 0x235b454 0x235adb4 0x235accb 0x2801879 0x280193e 0x1850a9b 0x20c22 0x2a05)

terminate called throwing an exception(lldb) 

我要做的是一个table有几个section,每个section都存放一个个人地址,最后一个section是添加个人地址用的,如果地址数量达到5个,则最后一个添加新地址的section不显示。

之前section个数是这样给的:

[plain] view plaincopy

  1. return [self.addsArray count]<5 ? [self.addsArray count] + 1 : [self.addsArray count];

在删除的时候先删除数据源,然后做删除列表刷新界面操作,但是这样会报出如上的错误。

这个错误的意思是说:我删除之前有5个section,删除之后section数量不变(由于我需要重现添加新地址这个section就导致section数量不变)。这是矛盾的,所以xcode就给我报错了。

我的解决办法是:定义了一个局部变量sectionCount,未作删除操作时,它的数量就是

[plain] view plaincopy

  1. [self.addsArray count]<5 ? [self.addsArray count] + 1 : [self.addsArray count];

再删除操作时是这样的:

[plain] view plaincopy

  1. BOOL success = [[DataCenter singleton] deleteAddressFromeDB:userAdds.user_id
  2. withAddressId:userAdds.address_id];
  3. [self.addsArray removeObjectAtIndex:deleteSection];
  4. sectionCount = [self.addsArray count];
  5. [addressTable deleteSections:[NSIndexSet indexSetWithIndex:deleteSection]
  6. withRowAnimation:UITableViewRowAnimationFade];
  7. sectionCount = sectionCount+1;
  8. [addressTable reloadData];

综上所述:1.先删除数据源,再做删除section操作,2.再增加一个section(添加新地址的),再刷新界面。这样就可以解决这个问题了。

二、EXC_BAD_ACCESS

这个问题对于初学者来说,估计够DT的。这个崩溃最大可能就是过度释放引起的,但是从打印的信息根本看不出来,这里说一个我常用的方法,如下图(xcode版本不同,位置可能不一样,我用的是4.5的版本):

-->(勾上Enable Zombie Objects)

然后再次运行,可以看到这样的打印信息:

可以看出应该是一个table过度释放了(运气好的话会在代码中直接指出你崩溃的那一行),然后去找那个table在哪过度释放了,这样问题就解决了。(当然了,这个方法并不是百试百灵,有时候你还得一步步的跟踪,调试

三、Undefined symbols for architecture i386:

解决办法:http://blog.csdn.net/azhou_hui/article/details/18312047

四、Local declaration of ‘xxx‘ hides instance variable

这是由于定义了一个与成员变量相同名称的局部变量引起的,只要将局部变量或者成员变量的名称修改一个就行了。

五、-[__NSArrayM respondsToSelector:]: message sent to deallocated instance 0xfe8afb0

消息发送给了一个已经释放的对象,就是说你使用的对象已经被释放掉了,检查一下这个对象的内存管理吧。

***

六 、Unbalanced calls to begin/end appearance transitions for <UIViewController: 0x1111fec0>.

找到了出现问题的地方:

[plain] view plaincopy

  1. 1. id pp = [vc performSelector:@selector(presentingController)];
  2. 2. [pp presentModalViewController:nav animated:YES];

在第一行代码中presentingController方法中有动画还未执行完成,第二行就开始了,这就导致了出现上述问题。解决类似问题的办法就是让第一个动画执行完成之后再执行下一个动画。

七、Direct access to objective-c‘s isa is deprecated in favor of object_setClass() and object_getClass()

在xcode 4.6的jsonKit中碰到上面的警告,谷歌了下,有下面两个解决办法:

object->isa = xxx;替换为object_setClass(object,xxx) ;或者object_getClass(object) = xxx;

八,模拟器上图片显示,真机不显示

原因可能有一下两种:

1.图片非png格式

2.图片名称大写问题,模拟器不区分大小写,真机区分

(刚学习的,如果还有其他可能,欢迎补充)

九、第一次运行崩溃,第二次正常

解决办法:

把调试器LLDB换成GDB

步骤:

新版XCode(4.3以后的)的调试器,默认是用lldb,据说ll这套是比较高级的新版本。
      可是XCode下用貌似有各种问题。比如断点去掉了依然不停的断在那里。
      如果不胜其烦,可以用gdb来替代。

Product->Edit Scheme-> Run xxx.app(TargetName) -> Info -> Debugger 选择gdb即可

十、warning: no rule to process file ‘$(PROJECT_DIR)/Photo/SelectFileDetailVC.h‘ of type sourcecode.c.h for architecture armv7

找到“Build Phases”(不知道在哪的可以看上面第三个问题,有步骤),删除掉“SelectFileDetailVC.h”这个文件即可。

十一、Unbalanced calls to begin/end appearance transitions for <uivewcontroller>

这个问题是由于上一个动画还没结束,下一个动画就开始了,造成的。

这里有个一解决方法:http://www.kaifajie.cn/ios/9413.html

十二、ASIHTTPRequest 类库在iOS 7.0中(这个是转来的,不过我发现iOS6也会有警告),会有一些报错警告,需要稍作修改:

  1、
if ([inputStream streamStatus] == NSStreamEventErrorOccurred) {

  修改成:
if ([inputStream streamStatus] == (NSStreamStatus)NSStreamEventErrorOccurred) {

  2、
return [[NSDate date] addTimeInterval:maxAge];

  修改成:
return [[NSDate date] dateByAddingTimeInterval:maxAge];

十三、xcode4.5真机调试问题:

提示信息如下:
Xcode cannot run using the selected device.

Choose a destination with a supported architecture in order to run on this device.

1、怀疑证书有问题。不过检查了很久都没有发现。

2、开始怀疑ios的版本问题。真机的ios版本是ios5.1。xcode4.5是给最新版本的ios6的。不过感觉也不对,以前的xcode版本会提示xcode不支持你现有设备的版本。建议你下载这个版本的ios debug包。但是这次并没有这个提示。
我又用一台4.1版本的设备链接到xcode。这次就提示xcode只支持ios 4.3、5.0、5.1、6.0这几个版本。这次排除了设备的ios版本问题。
这时候只能求助万能的google了。发现解决方案了。http://stackoverflow.com/questions/11673424/xcode-4-4-unable-to-run-project。

原来是xcode4.5现在只支持ARM7指令的编译。现有项目设置是同时支持ARM6和ARM7编译。把项目编译选择成只支持ARM7就可以真机调试了。根据帖子讲,xcode4.5编译出来的程序只能运行在ios4.3以上的系统。如果想兼容旧有版本的话需要使用旧版本的xcode编译。(可能还有另外的解决方案,暂时没有去研究)

十四、(format 10, created by Subversion 1.6)问题

原文链接:http://blog.csdn.net/tongzhitao/article/details/18221831

项目,用Version工具check out。

Xcode5升级了相关东西,就出现了 (format 10, created by Subversion 1.6)问题。

原因应该是,版本太旧了。相当于我在低版本时候checkout了项目。需要升级。

终端:svn upgrade  就可以了。

相关svn工具也需要升级

十五、"library not found for - "解决办法

解决办法:http://lizi464789754.blog.163.com/blog/static/168937085201411134123538/

待续。。。

时间: 2024-11-11 17:59:50

iOS开发---- 开发错误汇总及解决方法的相关文章

IOS开发中 常常遇到的遇到的警告,错误汇总,解决方法

从sdk3.2.5升级到sdk 5.1中间废弃了很多的方法,还有一些逻辑关系更加严谨了. 1,警告:"xoxoxoxo"  is deprecated 解决办法:查看xoxoxoxo的这个方法的文档,替换掉这个方法即可. 2,警告:Declaration of "struct sockaddr" will not be visible outside of this function 解决办法:在你的开源.m文件中添加 #import <netinet/in.

【转】IOS 输入框被键盘遮盖的解决方法

做IOS开发时,难免会遇到输入框被键盘遮掩的问题.上网上搜索了很多相关的解决方案,看了很多,但是由衷的觉得太麻烦了. 有的解决方案是将视图上的所有的东西都添加到一个滚动视图对象( UIScrollView )中,然后滚动视图实现输入框不被软键盘覆盖,个人觉得此方案好是好,但是太过麻烦. 有的解决方案是通过一个通知 UIKeyboardDidShowNotification去实现的,需要用到事件监听,而且需要自己定义并实现“将要开始编辑”与“结束编辑”这两个监听事件中的方法.本人也觉得很麻烦. 参

coreseek常见错误原因及解决方法

coreseek常见错误原因及解决方法 Coreseek 中文全文检索引擎 Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协议开源发布,基于Sphinx研发并独立发布,专攻中文搜索和信息处理领域,适用于行业/垂直搜索.论坛/站内搜索.数据库搜索.文档/文献检索.信息检索.数据挖掘等应用场景,用户可以免费下载使用 本文为大家整理了coreseek/sphinx中文检索引擎的常见问题和解决方法,感兴趣的同学参考下. Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协

[转载]DirectX SDK (June 2010)安装错误S1023,解决方法

导致这个错误的原因是在安装DirectX SDK (June 2010)之前.我就安装了VS2010 . 所以也就安装了: Microsoft Visual C++ 2010 x86 Redistributable Microsoft Visual C++ 2010 x64 Redistributable 而DirectX SDK (June 2010)会在安装的过程中再次安装.囧 所以解决的办法就是在安装DirectX SDK (June 2010)之前先将以上两个程序卸载. 在运行中执行以下

SQL Server 2014 无法打开用户默认数据库 登录失败错误4064的解决方法

SQL Server 2014 无法打开用户默认数据库 登录失败错误4064的解决方法 晚上干了件蠢事,删除了管理员账户的默认数据库,紧接着就出现了标题里面的报错. 解决办法如下: 第一步:打开命令控制台 Win+R打开运行,输入CMD 第二步:复制粘贴如下命令 sqlcmd -E -d"master" -Q"exec sp_defaultdb N'PC\Admin', N'master'" 注意:把上条命令PC\Admin改成自己实际的账户,使用BackSlash

android 真机调试出现错误 INSTALL_FAILED_INSUFFICIENT_STORAGE 的解决方法。

关于这个神奇的 内存不够错误的通常解决方法,网上大把,建议大家在尝试过了网上的方法后再来尝试下我的这种方法. 编译工具: android studio 测试真机:米 2 调试的时候出现:INSTALL_FAILED_INSUFFICIENT_STORAGE 按照字面意思理解为:因为内存满了而导致安装失败. 要先确定手机内存还有足够的空间时,就可以排除非内存不够引起的. 我的解决方法,手机连接电脑,手动通过电脑安装一个任意的 apk,然后再调试,就能解决了,神奇吧,原因不知为何.

Win8/8.1下驱动安装“数据无效”错误的有效解决方法

Windows8.1 安装完vmware 后并没有安装 vmnet1,vmnet8 这两个虚拟网卡,纠结了半天,原来是两个服务没打开. 如果你使用的是Windows8或者8.1,并且精简过系统,那么在安装驱动程序的过程中,你可能会遇到"数据无效"的错误.笔者确信所拥有的驱动程序是可以安装在Win8/Win8.1的系统中的,但是查阅了网络上关于所有安装驱动程序过程中出现"数据无效"的解决方法,都尝试无果,后来终于摸索出行之有效的解决方法--开启服务,屡试不爽. 原来,

InnoDB: Operating system error number 87 in a file operation. 错误87的解决方法

InnoDB: Operating system error number 87 in a file operation. 错误87的解决方法 140628  8:10:48 [Note] Plugin 'FEDERATED' is disabled.140628  8:10:48 InnoDB: The InnoDB memory heap is disabled140628  8:10:48 InnoDB: Mutexes and rw_locks use Windows interlock

Win10安装office2013提示错误1406的解决方法

Win10已经发布了很长一段时间,也有遇到很多的问题.这不又有澳门金沙遇到了问题了,用户在安装office2013的时候,提示错误1406.怎么办?遇到这样的问题,我们应该怎么去解决它呢?下面就和大家说一下Win10安装office2013提示错误1406的解决方法. 具体方法如下: 1.在文件资源管理器的“快速访问”栏里输入regedit,打开注册表编辑器,到HKEY_CURRENT_USER\Software\Microsoft\Office\: 2.将注册表编辑器左栏的“office”及其