Heim  >  Artikel  >  Backend-Entwicklung  >  Fragen zur iOS-Entwicklung (2)

Fragen zur iOS-Entwicklung (2)

黄舟
黄舟Original
2017-01-20 09:26:08970Durchsuche

11. Fehler beim Starten des Remote-Programms: Fehler beim Abrufen der Aufgabe für Prozess 6405.
Ad-hoc-Profil unterstützt kein Debuggen. Wechseln Sie zum Entwicklungsprofil.
12. OTA kann nicht heruntergeladen werden, es erscheint die Meldung „Anwendung kann nicht heruntergeladen werden“
Die Bundle-ID in der .plist-Datei ist falsch geschrieben (oder enthält chinesische Zeichen), wie zum Beispiel:

<key>bundle-identifier</key>
<string>com.xxx.--APN--</string>

Der com.xxx. – APN – enthält Chinesisch („--“) und sollte in Englisch geändert werden.
Oder das Signaturzertifikat ist ungültig. Bitte suchen Sie das Signaturzertifikat in Orgnizer.
12. EXEC_BAD erscheint häufig in ASIHTTPRequest
Bei der Verwendung von ASIHTTPRequest für asynchrone Anfragen kommt es häufig zu Programmabstürzen. Insbesondere während des Anfragevorgangs (nicht abgeschlossen), wenn Sie die Ansicht wechseln. Da es sich um eine asynchrone Anforderung handelt, kann das Anforderungsobjekt jederzeit den Delegaten (ViewController) aufrufen, und der ViewController wurde möglicherweise zu diesem Zeitpunkt freigegeben. Weil UIKit den ViewController freigibt, der derzeit nicht angezeigt wird. Wenn Sie ViewController wechseln, wird der ausgeblendete ViewController jederzeit freigegeben. Wenn die Anfrage die Delegate-Methode von ViewController zurückruft und dieser ViewController zufällig von UIKit freigegeben wird, wird EXEC_BAD ausgegeben. In der offiziellen Dokumentation wird auch erwähnt: „Anfragen behalten ihre Delegaten nicht bei. Wenn also die Möglichkeit besteht, dass die Zuweisung Ihres Delegaten während der Ausführung Ihrer Anfrage aufgehoben wird, ist es in den meisten Fällen wichtig, dass Sie die Delegateneigenschaften der Anfrage löschen.“ Wenn die Zuordnung aufgehoben wird, möchten Sie wahrscheinlich auch die Anfrage abbrechen, da Ihnen der Status der Anfrage nicht mehr wichtig ist.
Daher müssen wir bei der Verwendung von ASIHTTPRequest für die asynchrone Programmierung das Delegate-Attribut der Anfrage selbst löschen. In der Dealloc-Methode von Delegate (ViewController) sollten Sie Folgendes tun:

[request clearDelegatesAndCancel];
[request release];

Anfrage kann natürlich keine temporäre Variable sein, sondern sollte ein beibehaltenes Mitgliedsobjekt (oder Attribut) sein, andernfalls können Sie die Freigabe nicht aufheben Methode clearDelegatesAndCancel.

13. Behauptungsfehler in -[UIActionSheet showInView:]
Aktionsblatt im Hauptthread öffnen:

[selfperformSelectorOnMainThread:@selector(showActionSheet) withObject:nilwaitUntilDone:NO];


showActionSheet-Methode:

-(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-Kompilierungsfehler
Der folgende Fehler wird beim Kompilieren angezeigt:

"_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)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Fragen zur iOS-Entwicklung (1)Nächster Artikel:Fragen zur iOS-Entwicklung (1)