私は次のようにCGSizeオブジェクトの値を記録(印刷)しようとしました:
CGSize sizeOfTab = CGSizeMake(self.frame.size.width/tabCount, 49);
NSLog(@"size of tab is %@",sizeOfTab);
このコードに問題はありませんか?NSLogステートメントに制御が渡っている間にアプリがクラッシュします。
おかげでプラサド
回答:
これを試して
CGSize sizeOfTab = CGSizeMake(self.frame.size.width/tabCount, 49);
NSLog(@"size of tab is %@",NSStringFromCGSize(sizeOfTab));
sizeOfTab
がNSString
フォーマットされていないため、クラッシュが発生します。
sizeOfTab
がオブジェクトではないために発生します(単なるオブジェクトではなく、すべてのオブジェクトが機能しますNSString
)。CGSize
構造体です。
self.frame.size.width/tabCount
以下のようJoeBlowが言及した(私は入力して、この答えをフォーマットした後に気づいた)、また、UIKitの機能があります、NSStringFromCGSize()
かなり印刷、およびその逆のため、CGSizeFromString()
作成するためCGSize
の構造体をNSString
オブジェクト。
Apple は次のようにstring
パラメータを文書化しています。CGSizeFromString(
string
)
内容が "{ w、h }" という形式の文字列。wは幅、hは高さです。WとHの値は、整数または浮動小数点値であることができます。有効な文字列の例は@ "{3.0,2.5}"です。文字列はローカライズされていないため、項目は常にコンマで区切られます。
CGSize size = CGSizeFromString(@"{320,568}");
NSLog(@"Pretty printed size: %@", NSStringFromCGSize(size));
Pretty printed size: {320, 568}
%@は、文字列を挿入しようとしていることを意味します。CGSizeは文字列ではなく、自動的に文字列に変換することはできません。そのため、アプリがクラッシュします。代わりに、個々のプロパティを個別にログに記録する必要があります。
NSLog(@"width is %f, height is %f.", sizeOfTab.width, sizeOfTab.height);
%fが使用されるのは、幅と高さのプロパティがfloat型であるためです。
他のフォーマット変換については、ドキュメントを参照してください:http : //developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html