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

Fragen zur iOS-Entwicklung (6)

黄舟
黄舟Original
2017-01-20 09:38:271521Durchsuche

61. Warnung „Fügen Sie explizite Klammern hinzu, um baumelnde else-Anweisungen zu vermeiden“
Das sogenannte „gefährliche else“ ist Code wie dieser:
i

f(a== 10)
printf("TEN");
else
printf("NOT TEN");
a = 100;

Der Compiler denkt, dass Ihre else-Klausel die Semantik ist unklar. Was meinst du? Unabhängig davon, ob a gleich 10 ist, sollte a nach der Ausführung von if der Wert 100 zugewiesen werden, oder soll a nur in der else-Klausel der Wert 100 zugewiesen werden (d. h. wenn a ungleich 10 ist). )?
Wenn ersteres der Fall ist, sollte die korrekte Schreibweise lauten:

if(a== 10) {
printf("TEN");
}else{
printf("NOT TEN");
}
a= 100;
如果是后者,正确的写法应该是:
if(a== 10) {
printf("TEN");
}else{
printf("NOT TEN");
a = 100;
}

Natürlich ist dies für den C/C++/Java-Compiler nur ein kleines Problem und führt nicht zu einem Fehler kompilieren. Der Compiler bevorzugt tatsächlich ersteres und behandelt automatisch den ersten Fall. Sie werden jedoch gewarnt, dass es sich hierbei um einen schlechten Codierungsstil handelt. Sie können diese Warnung mit dem #pragma clang-Diagnose-Makro „-Wswitch“ ignorieren oder die Kompilierungsoption „MissingBraces and Parentheses“ auf „NO“ setzen.
62. Der iPad-Simulator zeigt die Home-Taste nicht an.
Um dem Benutzer mehr Platz zur Verfügung zu stellen, zeigt der iPad-Simulator ab Xcode 4.3 die Home-Taste nicht an. Sie können den Home-Button über das Menü „Hardware > Home“ oder die Tastenkombination ⇧⌘H ersetzen.
63. Novisible @interface für „NSURL“ deklariert den Selektor „query“
In iOS6 wird diese Methode aufgegeben, bitte verwenden Sie stattdessen NSURL+Parameter.
64. Die Zertifikatsidentität „iPhone Distribution“ erscheint mehr als einmal.
Dies ist ein Fehler bei doppelten Zertifikaten. Sie müssen die doppelten Zertifikate im Schlüsselbund löschen, bevor die Kompilierung durchgeführt werden kann. Wenn Sie Xcode jedoch neu starten, werden Sie feststellen, dass das zuvor gelöschte Zertifikat wieder vorhanden ist. Wenn Xcode jedoch neu gestartet wird, wird das Zertifikat in Xcode in den Schlüsselbund importiert, sodass das bloße Löschen des doppelten Zertifikats im Schlüsselbund wirkungslos ist.
Ich glaube, dass viele Studenten von diesem Fehler in Xcode angewidert sind, aber es gibt keine andere Möglichkeit, als das Zertifikat wiederholt (aber vergeblich) aus dem Schlüsselbund zu löschen. Tatsächlich können wir Xcode nicht allein dafür verantwortlich machen, aber es hat auch etwas mit dem „iPhone Configuration Utility Tool“ zu tun.

Diese „Rest“-Zertifikate in Xcode existieren nicht in regulärer Form. Wenn Sie das „iPhone-Konfigurationsdienstprogramm“ installieren, sind diese Zertifikate tatsächlich in .app-Dateien im Verzeichnis /Users/km-cn/Library/MobileDevice/Applications/ vorhanden. Diese .apps sind tatsächlich das „iPhone-Konfigurationsdienstprogramm“ – Die importierten App unter „Anwendungen“. Sie können Finder – „Paketinhalt anzeigen“ verwenden, um die .app anzuzeigen. Eine der Dateien mit dem Namen „embedded.mobileprovision“ ist ein „verbleibendes“ Duplikatzertifikat. Sie können diese .apps einzeln löschen oder einfach alle .apps im Verzeichnis löschen (solange die Projektdatei vorhanden ist, können Sie diese .apps jederzeit kompilieren und in das „iPhone-Konfigurationsdienstprogramm“ importieren). . Löschen Sie abschließend die doppelten Zertifikate in Orgnizer und starten Sie Xcode neu.
65. Anwendungs-ID „com.ydtf.*“, die nicht mit der aktuellen Einstellung „com.ydtf.dlt“ übereinstimmt.
Wie Sie sehen können, stimmen diese beiden Anwendungs-IDs definitiv überein (* stellt ein Platzhalterzeichen dar) . Dieser unerklärliche Fehler führt jedoch dazu, dass Sie nie kompilieren. Dies ist definitiv ein weiterer Fehler in Xcode. Ändern Sie CodeSigning zunächst in „Don't Code Sign, Build“ und ändern Sie es dann wieder in die korrekte Signatur „Build“.
66. Die zum Signieren der ausführbaren Datei verwendete Identität ist nicht mehr gültig.
Aufgrund des vorherigen Signaturproblems kann sie nicht archiviert werden. Die Lösung finden Sie in Frage 65.
67. Verwenden Sie presentModalViewController, um die Größe des Popup-Fensters im iPad festzulegen

TestViewController*testVC = [[TestViewController alloc] initWithNibName:@"TestViewController"bundle:nil];
testVC.modalPresentationStyle= UIModalPresentationFormSheet;
testVC.modalTransitionStyle= UIModalTransitionStyleCrossDissolve;
[selfpresentModalViewController:testVC animated:YES];
testVC.view.superview.frame= CGRectMake(0, 0, 649, 397);//it's important to do this afterpresentModalViewController
testVC.view.superview.center = self.view.center;

Hinweis: //Es ist wichtig, dies nach presentModalViewController zu tun. Das heißt, Sie müssen die Bildgröße nach [selfpresentModalViewController:testVC animiert:YES]; festlegen.

68. Passen Sie die ActionSheet-Schaltflächen und die Popover-Pfeilrichtung auf dem iPad an.
ActionSheet wird im Popover-Modus auf dem iPad angezeigt. Der cancelButton wird standardmäßig nicht angezeigt (das SDK verwendet den Bereich außerhalb des Popovers anstelle des cancelButtons. Solange der Benutzer auf den Bereich außerhalb des Popovers klickt, entspricht dies dem Klicken auf die Schaltfläche „Abbrechen“). Wenn Sie ein ActionSheet wie folgt initiieren:

UIActionSheet* sheet=[[UIActionSheet alloc]initWithTitle:nil
delegate:self
cancelButtonTitle:@"cancel"
destructiveButtonTitle:@"ok"
otherButtonTitles:nil];

, dann wird nur der rote destruktiveButton angezeigt.
Wenn Sie cancelButton anzeigen müssen, können Sie Folgendes tun:

UIActionSheet* sheet=[[UIActionSheet alloc]initWithTitle:nil
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:@"cancel",@"ok",nil];
// sheet.cancelButtonIndex=0;
sheet.destructiveButtonIndex=1;

Nach der Angabe von destructiveButtonIndex wird die Schaltfläche rot angezeigt.

Geben Sie jedoch niemals cancelButtonIndex an, da cancelButton auf dem iPad entfernt wird.
Auf dem iPad stellt das SDK keine API bereit, die die Pfeilrichtung von actionSheet ändern kann. Das System bestimmt automatisch die Richtung der Pfeilanzeige. Aber wir können den ersten Parameter von showFromRect verwenden, um die Richtung des Pfeils zu ändern:

CGRect r=sender.bounds;
r.size.width=2*self.view.bounds.size.width;
r.origin.x=-self.view.bounds.size.width+sender.bounds.size.width/2+sender.frame.origin.x;
[sheet showFromRect:r inView:sender animated:YES];

Dadurch wird der ursprüngliche Linkspfeil durch einen Aufwärtspfeil ersetzt.

Tatsächlich ist die Logik von iOS bei der Beurteilung der Popup-Richtung von actionSheet sehr einfach. Wo immer „genug“ Platz vorhanden ist, wird es dort angezeigt. Wenn wir den ersten Parameter von showFromRect verwenden, um alle drei Richtungen zu „blockieren“, kann er nur aus der gewünschten Richtung angezeigt werden.
69. setShowAccurateProgress=YES funktioniert nicht in ASINetworkQueue
Request.showAccurateProgress= YES vor networkQueue.showAccurateProgress= YES hinzufügen, andernfalls wird showAccurateProgress nicht wirksam. Beispielcode:

equest.showAccurateProgress=YES;
networkQueue.showAccurateProgress=YES;
[networkQueue setSuspended:YES];
[networkQueue addOperation:request];
networkQueue.uploadProgressDelegate=self;
[networkQueue go];

此外,由于 CFNework 中的一个 Bug,对于小于128K的数据,无法跟踪其上传/下载的精确进度。
70、如何设置 UIWebView 背景色为透明?
在IB中设置 UIWebView 的 Background 属性为 Clear Color 并不能使其背景透明。要达到这个目的,你需要使用以下两句:

[webView setBackgroundColor:[UIColor clearColor]];[webView setOpaque:NO];

以上就是iOS 开发百问(6)的内容,更多相关内容请关注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