フォーマットは文字列リテラルではなく、フォーマット引数のコンパイルエラーもありません。フォーマットは文字列リテラルではなく、フォーマット引数はありません
は、ここに私のコード私はNSMutableArrayのを追加しようとしている
です。
for (int i=0; i<feed.count; i++) {
[html appendFormat:[self.itemName objectAtIndex:i]]; }
誰かが私を助けてくれますか?
フォーマットは文字列リテラルではなく、フォーマット引数のコンパイルエラーもありません。フォーマットは文字列リテラルではなく、フォーマット引数はありません
は、ここに私のコード私はNSMutableArrayのを追加しようとしている
です。
for (int i=0; i<feed.count; i++) {
[html appendFormat:[self.itemName objectAtIndex:i]]; }
誰かが私を助けてくれますか?
appendFormat:メソッドには、最初のパラメータとして文字列が必要です。
だから、送信あなたのセレクタのようなものでなければなりません:あなたはまた、直接文字列を追加することができ
[html appendFormat:@"%@", [self.itemName objectAtIndex:i]];
けれども:
[html appendString:[[self.itemName objectAtIndex:i] description]];
オブジェクトが、直接でない場合には、私はdescription
メッセージを追加しました文字列、はっきりしている。
-appendFormat:
には、書式文字列として変数を指定します。これは非常に悪い考えです。形式指定子(基本的には、"%"
に続けて別の文字が続きます)があると、-appendFormat:
は提供しなかったvarargsの次の引数を読み込もうとします。ガベージメモリをスタックから読み込み、挿入しようとしています。せいぜい、これはクラッシュになります。最悪の場合、セキュリティエクスプロイトのためのベクターです。
代わりに-appendString:
を使用してください。
[self.itemName objectAtIndex:i]
がNSString*
であることに注意してください。それ以外の場合は、その説明を追加することができます(例: [html appendFormat:@"%@", [self.itemName objectAtIndex:i]]
、または正確なタイプに基づいて別のものを追加することができます。
ありがとうございました。私はそのオプションを試してみる。 – HardCode
このコードは何をすべきですか? -[NSMutableString appendFormat:]
は、@"The %@ says %@"
のようにformat stringをとり、残りの引数で「空白を埋める」。
ほとんど使用されない書式指定子の中には、プログラムの情報を明らかにしたり、クラッシュさせるものがあるという点で危険です(uncontrolled format string attack)。このため
(およびフォーマット文字列は、変数から情報を集めることを意図しているので)、あなたは常には、フォーマット文字列自体ではない変数や配列から、文字列リテラルになりたいです。
だから、あなたはこのようにappendFormat:
を使用することができます。
for (int i=0; i<feed.count; i++) {
[html appendFormat: @"%@", [self.itemName objectAtIndex:i]]; }
それとも、あなただけの代わりにappendString:
を使用することができます。
for (int i=0; i<feed.count; i++) {
[html appendString:[self.itemName objectAtIndex:i]]; }
ないより多くの情報なし。 'フィード'はどのようなタイプですか? 'html'はどんなタイプですか? 'itemName'とはどのような型ですか、そのオブジェクトはどのような型ですか?私たちがあなたのやっていることを理解し始めるために必要なすべての細部を教えてください。 – PengOne
@PengOne:私はこれらのタイプがかなり明らかだと思います。'feed'はコレクションの型(NSArrayの可能性が高い)、' html'はNSMutableString、 'itemName'はコレクションのいくつかのタイプ、おそらくNSArrayです。 –
@ Kevin: "NSMutableArrayを追加しようとしています"というステートメントは、このことの多くを不明瞭にしています。さらに、この情報を綴ることは良い習慣です(そして、彼はおそらく彼自身の質問に答えることができました)。 – PengOne