ホームページ  >  記事  >  バックエンド開発  >  iOS 開発に関する質問 (6)

iOS 開発に関する質問 (6)

黄舟
黄舟オリジナル
2017-01-20 09:38:271521ブラウズ

61. 警告「else のぶら下がりを避けるための明示的な中括弧」
いわゆる「危険な else」は、次のようなコードです。 a が 10 に等しいかどうかに関係なく、if の実行後に a に値 100 を割り当てる必要がありますか、それとも else 句で (つまり、a が 10 に等しくない場合にのみ) a に値 100 を割り当てますか? )?
前者の場合、正しい書き方は次のようになります:

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

もちろん、c/c++/java コンパイラーの場合、これは単なる小さな問題であり、コンパイルの失敗にはつながりません。コンパイラは実際には前者を優先し、最初のケースを自動的に処理します。ただし、これは不適切なコーディング スタイルであるという警告が表示されます。#pragma Clang 診断無視の "-Wswitch" マクロを使用してこの警告を無視することも、コンパイル オプション MissingBraces と Parenttheses を NO に設定することもできます。
62. iPad シミュレーターはホーム ボタンを表示しません

Xcode 4.3 以降、ユーザーが使用できるスペースを増やすために、iPad シミュレーターはホーム ボタンを表示しません。 ホーム ボタンは、メニュー「ハードウェア > ホーム」またはショートカット キー ⇧⌘H を使用して置き換えることができます。

63. 'NSURL' の Novisible @interface はセレクター 'query' を宣言します
iOS6 では、このメソッドは廃止されました。代わりに NSURL+Parameters を使用してください。
64.certificateidentity 'iphone distribution' が複数回表示されます
これは、コンパイルが成功する前に、キーチェーン内の重複した証明書を削除する必要があります。ただし、Xcode を再起動すると、以前に削除した証明書が戻っていることがわかります。ただし、Xcode を再起動すると、Xcode 内の証明書がキ​​ーチェーンにインポートされるため、キーチェーン内の重複した証明書を削除するだけでは効果がありません。
多くの学生が Xcode のこのバグにうんざりしていると思いますが、キーチェーンから証明書を繰り返し (しかし無駄に) 削除する以外に方法はありません。実際、Xcode だけを責めることはできませんが、「iPhone 構成ユーティリティ ツール」も関係しています。

Xcode 内のこれらの「残りの」証明書は、通常の形式では存在しません。 「iPhone 構成ユーティリティ」をインストールすると、これらの証明書は実際には /Users/km-cn/Library/MobileDevice/Applications/ ディレクトリの .app ファイルに存在します。これらの .app は実際には「iPhone 構成ユーティリティ」です。 「アプリケーション」内のアプリ。 Finder の「パッケージの内容を表示」を使用して、.app を表示できます。 「embedded.mobileprovision」という名前のファイルの 1 つは、「残りの」重複証明書です。これらの .app を 1 つずつ削除することも、ディレクトリ内のすべての .app を単純に削除することもできます (いずれにしても、プロジェクト ファイルが存在する限り、いつでもこれらの .app をコンパイルして「iPhone 構成ユーティリティ」にインポートできます)。 。最後に、Orgnizer で重複した証明書を削除し、Xcode を再起動します。
65. 現在の設定「com.ydtf.dlt」と一致しないアプリケーション識別子「com.ydtf.*」
ご覧のとおり、これら 2 つのアプリケーション ID は確実に一致します (* はワイルドカード文字を表します)。しかし、この不可解なエラーが原因でコンパイルができなくなります。これは間違いなく Xcode の別のバグです。まず CodeSigning を変更してコード署名、ビルドを行わないようにし、次に正しい署名ビルドに変更して戻します。
66. 実行可能ファイルの署名に使用された ID は無効になりました。
以前の署名の問題により、アーカイブできません。解決策については、質問 65 を参照してください。
67. presentModalViewController を使用して iPad のポップアップ ウィンドウのサイズを設定します

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

注: //presentModalViewController の後にこれを行うことが重要です。つまり、[selfpresentModalViewController:testVC anime:YES]; の後にフレーム サイズを設定する必要があります。

68. iPad でアクションシートのボタンとポップオーバーの矢印の方向をカスタマイズします。

iPadではアクションシートがポップオーバーモードで表示されます。 cancelButton はデフォルトでは表示されません (SDK は、cancelButton の代わりにポップオーバーの外側の領域を使用します。ユーザーがポップオーバーの外側の領域をクリックする限り、キャンセル ボタンをクリックするのと同じです)。 ActionSheet を

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;

のように初期化すると、最終的には赤い破壊的なボタンのみが表示されます。
cancelButton を表示する必要がある場合は、次のようにすることができます:

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

destructiveButtonIndex を指定すると、ボタンが赤色で表示されます。

ただし、cancelButtonIndex は決して指定しないでください。iPad では cancelButton が削除されるためです。

iPad では、アクションシートの矢印の方向を変更できる API が SDK に提供されていません。矢印の表示方向はシステムが自動的に決定します。ただし、showFromRect の最初のパラメータを使用して矢印の方向を変更できます:

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

これにより、元の左矢印が上矢印に置き換えられます。

実際、actionSheet のポップアップ方向を判断するときの iOS のロジックは非常に単純で、「十分な」スペースがある場合はその側にポップアップします。 showFromRect の最初のパラメータを使用して 3 方向すべてを「ブロック」すると、必要な方向からのみポップアップできます。

69. setShowAccurateProgress=YES は ASINetworkQueue では機能しません。
networkQueue.showAccurateProgress= YES の前に request.showAccurateProgress= YES を追加します。そうしないと、showAccurateProgress が有効になりません。サンプルコード:

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




声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。