2009-06-29 14 views
4

私は助けが必要です。iPhone:フォーマットされた文字列の問題(目的C)

NSProcessInfo *process = [NSProcessInfo processInfo]; 
NSString *processName = [process processName]; 
int processId = [process processIdentifier]; 
NSString *processString = [NSString stringWithFormat:@"Process Name: @% Process ID: %f", processName, processId]; 
NSLog(processString); 

しかし、このことを行います:

NSLog(@"Process Name: %@ Process ID: %d", [[NSProcessInfo processInfo] processName], [[NSProcessInfo processInfo] processIdentifier]); 

答えて

14
  • %@:オブジェクトの文字列形式(NSStringを含む)を出力します。
  • %f:出力浮動小数点数(float
  • %d:出力整数(int
  • %x:数

あなたオリジナルNSString:stringWithFormat:あった二つの問題の出力16進形式:

  1. @%は、%@である必要があります。 o NSStringを出力する。
  2. %dの代わりに%fを使用してintを出力します。
+0

+1ベストアンサー@%は有効なフォーマッタではないので、フォーマット文字列を投げ捨てるので、NSStringを浮動小数点数として印刷しようとするかも知れません。あなたが書式指示子について知っているのは単なる単純な間違いです。これに関する良いAppleのリファレンスは次のとおりです:http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html –

2

あなたのフォーマット文字列は悪いです:PROCESSIDはint型ではないfloat型である。これは動作しませんどのように来る

-Wformatを使用すると、この種のエラーを取り除くことができます。

+0

oh!ありがとう xcodeで-wformatを有効にする方法? – Devoted

+0

ターゲットの設定ウィンドウにこれの設定があります。私は名前を覚えていませんが、あなたはそのペインで検索することで簡単に見つけることができますね。 –

+0

Xcodeでは、-Wformatは "Typecheck Calls to printf/scanf"と表示されます。しかし、intはちょうど良いアップキャストされ、これが意図されていない場合でも、問題は見つけるのは簡単です。実際の問題は、NSStringのフォーマッタです - @ドリューは正しい答えを持っています。 –

0

フォーマットにエラーがあります。@%[NSString stringWithFormat:]に入れ替えました。ログには機能しますが、文字列の作成には使用できません。フォーマットは%@ではないので、@%です。

関連する問題