11. "원격 프로그램 시작 오류: 프로세스 6405에 대한 작업을 가져오지 못했습니다."
임시 프로필은 디버깅을 지원하지 않습니다. 개발 프로필로 변경합니다.
12. OTA를 다운로드할 수 없으며 "애플리케이션을 다운로드할 수 없습니다"라는 메시지가 표시됩니다.
.plist 파일의 번들 식별자가 잘못 작성되었습니다(또는 중국어 문자가 포함되어 있음). 예:
<key>bundle-identifier</key> <string>com.xxx.--APN--</string>
여기서 com.xxx.—APN—에는 중국어("--")가 포함되어 있으므로 영어로 변경해야 합니다.
또는 서명 인증서가 유효하지 않습니다. Orgnizer에서 서명 인증서를 검색하세요.
12. ASIHTTPRequest에 EXEC_BAD가 자주 나타납니다
ASIHTTPRequest를 사용하여 비동기 요청을 할 때 프로그램 충돌이 자주 발생합니다. 특히 요청 프로세스(완료되지 않음) 중에 보기를 전환하는 경우. 비동기식 요청이기 때문에 요청 객체는 언제든지 델리게이트(ViewController)를 호출할 수 있으며 이때 ViewController가 해제되었을 수 있습니다. UIKit은 현재 표시되지 않는 ViewController를 언제든지 릴리스하기 때문입니다. ViewController를 전환하면 숨겨진 ViewController가 언제든지 해제됩니다. 요청이 ViewController의 대리자 메서드를 호출하고 해당 ViewController가 UIKit에 의해 해제되면 EXEC_BAD가 발생합니다. 공식 문서에도 언급되어 있습니다. 요청은 대리인을 유지하지 않으므로 요청이 실행되는 동안 대리인이 할당 취소될 가능성이 있는 경우 대부분의 경우 대리인인 경우 요청의 대리인 속성을 지우는 것이 중요합니다. 할당이 취소될 예정이라면 더 이상 요청 상태에 관심이 없기 때문에 요청을 취소하고 싶을 수도 있습니다.
따라서 비동기 프로그래밍에 ASIHTTPRequest를 사용할 때 요청의 대리자 속성을 직접 지워야 합니다. Delegate(ViewController)의 dealloc 메서드에서는 다음을 수행해야 합니다.
[request clearDelegatesAndCancel]; [request release];
물론 요청은 임시 변수일 수 없지만 유지된 멤버 객체(또는 속성)여야 합니다. 그렇지 않으면 사용할 수 없습니다. dealloc 메소드.
13. -[UIActionSheet showInView:]
메인 스레드에서 작업 시트 열기:
[selfperformSelectorOnMainThread:@selector(showActionSheet) withObject:nilwaitUntilDone:NO];
showActionSheet 메서드:
-(void) showActionSheet { sheet = [[UIActionSheet alloc] initWithTitle:@"This is my ActionSheet!" delegate:self cancelButtonTitle:@"OK"destructiveButtonTitle:@"Delete Message!" otherButtonTitles:@"Option1", @"Option 2", @"Option 3", nil]; [sheet showInView:self.view]; }
14. RegexKitLite 컴파일 오류
컴파일 시 다음 오류가 표시됩니다:
"_uregex_find", referenced from: _rkl_search in RegexKitLite.o ……
在Build Settgins的Other Linke Flag中加入
-licucore
15、Archive时遇到“ResourceRules.plist:cannot read resources”错误
在build settings中找到Code Signing Resource Rules Path,填入$(SDKROOT)/ResourceRules.plist
16、使用ZombieEnable解决EXEC_BAD_EXCESS错误
这个错误是向一个release对象发送消息导致的。可以通过开启ZombieEnable参数来查找真正的问题。
Edit Scheme,选择Run …Debug,打开Arguments组,在Environment Variables中添加一个参数:
运行程序,当出现EXEC_BAD_EXCESS错误时,控制台中会输出具体出错的信息,比如:
*** -[ITSMTicketCell release]: message sent to deallocated instance0x897e920
直接指明了是由于某个对象在被释放之后,你发送了一条消息给它。
17、 关于Xcode4无法调试2代代老设备的问题
升级到Xcode4以后,你会发现许多程序无法在2代设备(有些3代设备,比如iTouch 3实际上仍然是2代的硬件)上运行了,并且Xcode4仅仅“Running…”就直接“Finished…”了,无论是Xcode控制台还是设备日志中,都没有任何提示。
注意:2代和3代的区别在于cpu架构。2代设备使用ARMv6架构cpu,3代设备使用ARMv7架构cpu。 iPhone 2G/3G,iPod 1G/2G属于ARMv6架构(2代),iPhone3GS/4, iPod 3G,iPad属于ARMv7架构(3代)。
stackoverflow上有关于这个的帖子,其中shapecatcher的答案是最准确的:
http://stackoverflow.com/questions/6378228/switching-from-xcode3-to-xcode4-cant-load-programs-onto-older-ipod-touch
1、打开Target的Build Settings,找到Architectures选项,将其从“$(ARCHS_STANDARD_32_BIT)”修改为“armv6$(ARCHS_STANDARD_32_BIT)”。注意大小写是敏感的。“$(ARCHS_STANDARD_32_BIT)”是一个变量,实际上等同于armv7。
2、Base SDK不需要改变,仍然是Lastest iOS。
3、打开Target的info,找到Required device capabilities,将下面的armv7删除。这个选项是Xcode4自己添加在工程中的默认设置,如果不去掉它,第1步-第2步的工作是无法生效的。
18、“Avalid provisioning profile for this device was not found.”
在你的开发证书中增加该设备的UDID。
19、将设备添加到 portal
连接设备,打开Orgnizer。在设备列表中选中设备,点击右边窗口左下角的“Add to Portal”按钮。或者在设备列的设备上右击,选择“AddDevice to Provisioning Portal”。
20、renew profile
打开Orgnizer,在LIBRARY中选择Provisioning Profiles。在右边窗口选择要renew的profile,点击右下角的“Refresh”按钮。输入Portal的密码,profile将被renew。
21、renew签名证书及设备激活文档
从portal移除过期的签名证书
重新制作开发证书和发布证书
删除开发和部署所用的激活文档(provisioningprofiles)
使用新的证书重新制作用于开发和部署的Provisioningprofiles
从钥匙串中删除老的证书
在XcodeOrganizer中安装新的provisioning profiles
完成
以上就是iOS 开发百问(2)的内容,更多相关内容请关注PHP中文网(www.php.cn)!