IOS开发错误汇总及解决方法

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

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:

当拷贝文件到工程里的时候,若不注意勾选"Add to Target",运行时会报如下类似的错误:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_SKPSMTPMessage", referenced from:
  objc-class-refin ConfirmController.o
 
"_kSKPSMTPPartContentTransferEncodingKey", referencedfrom:
  -[ConfirmControllersendEmail] in ConfirmController.o
 
"_kSKPSMTPPartMessageKey", referenced from:
  -[ConfirmControllersendEmail] in ConfirmController.o
 
"_kSKPSMTPPartContentTypeKey", referenced from:
  -[ConfirmControllersendEmail] in ConfirmController.o

 

ld: symbol(s) not found for architecture i386

解决方法:
先点击方案(左边列表,点击方案的图示)
选择target
选择页签Build Phases
Compile Source
如果没展开的话先展开
向下找加号,点击加号,将这个target需要的.m档案的头文件都加入吧
(如果只有一个 就把左右的.h档案都加入)
这样就应该可以了。


四、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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园的建设目标是通过数据整合、全面共享,实现校园内教学、科研、管理、服务流程的数字化、信息化、智能化和多媒体化,以提高资源利用率和管理效率,确保校园安全。 智慧校园的建设思路包括构建统一支撑平台、建立完善管理体系、大数据辅助决策和建设校园智慧环境。通过云架构的数据中心与智慧的学习、办公环境,实现日常教学活动、资源建设情况、学业水平情况的全面统计和分析,为决策提供辅助。此外,智慧校园还涵盖了多媒体教学、智慧录播、电子图书馆、VR教室等多种教学模式,以及校园网络、智慧班牌、校园广播等教务管理功能,旨在提升教学品质和管理水平。 智慧校园的详细方案设计进一步细化了教学、教务、安防和运维等多个方面的应用。例如,在智慧教学领域,通过多媒体教学、智慧录播、电子图书馆等技术,实现教学资源的共享和教学模式的创新。在智慧教务方面,校园网络、考场监控、智慧班牌等系统为校园管理提供了便捷和高效。智慧安防系统包括视频监控、一键报警、阳光厨房等,确保校园安全。智慧运维则通过综合管理平台、设备管理、能效管理和资产管理,实现校园设施的智能化管理。 智慧校园的优势和价值体现在个性化互动的智慧教学、协同高效的校园管理、无处不在的校园学习、全面感知的校园环境和轻松便捷的校园生活等方面。通过智慧校园的建设,可以促进教育资源的均衡化,提高教育质量和管理效率,同时保障校园安全和提升师生的学习体验。 总之,智慧校园解决方案通过整合现代信息技术,如云计算、大数据、物联网和人工智能,为教育行业带来了革命性的变革。它不仅提高了教育的质量和效率,还为师生创造了一个更加安全、便捷和富有智慧的学习与生活环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值