จะพิมพ์หรือบันทึกค่าของวัตถุ CGSize ได้อย่างไร?


88

ฉันพยายามบันทึก (พิมพ์) ค่าของวัตถุ CGSize ดังนี้:

CGSize sizeOfTab = CGSizeMake(self.frame.size.width/tabCount, 49);

NSLog(@"size of tab is %@",sizeOfTab);

มีอะไรผิดปกติในรหัสนี้; แอปของฉันขัดข้องในขณะที่การควบคุมมาถึงคำสั่ง NSLog

ขอบคุณปรา


2
NSStringFromCGSize () และ NSStringFromCGRect ()
Fattie

คำตอบ:


55

คุณสามารถเรียกสิ่งต่อไปนี้เพื่อพิมพ์ค่าที่คุณต้องการ:

NSLog(@"width = %f, height = %f", mySize.width, mySize.height);

218

ลองทำตามนี้

CGSize sizeOfTab = CGSizeMake(self.frame.size.width/tabCount, 49);
NSLog(@"size of tab is %@",NSStringFromCGSize(sizeOfTab));

ความผิดพลาดเกิดขึ้นเนื่องจากsizeOfTabไม่ได้อยู่ในNSStringรูปแบบ


3
เจ๋งนี่คือสิ่งใหม่ที่ฉันได้เรียนรู้ในวันนี้ +1 แต่ฉันจะไม่ลบคำตอบของฉัน :-P.
Praveen S

@Praveen: ขอบคุณ .. ดีใจที่ฉันช่วยให้คุณได้เรียนรู้สิ่งใหม่ ๆ ในวันนี้ ... เพิ่งคืนความโปรดปราน ฉันได้รับและยังอยู่ในช่วงสิ้นสุดการรับข้อมูลดังกล่าวผ่าน SO
visakh7

1
@ 7KV7 ข้อขัดข้องเกิดขึ้นเนื่องจากsizeOfTabไม่ใช่วัตถุ (วัตถุใด ๆ จะใช้งานได้ไม่ใช่แค่ a NSString) CGSizeเป็นโครงสร้าง
albertamg

ขอบคุณมันใช้งานได้ดี แต่มันแสดง {nan, 49}, nan คืออะไร?
ประสาท

@ แพร: นันฉันคิดว่าย่อมาจาก Not a Number tabCount คืออะไร? ลองบันทึกself.frame.size.width/tabCount
visakh7

11

ในฐานะที่เป็นjoeblow กล่าวถึง ( ผมสังเกตเห็นหลังจากการพิมพ์และการจัดรูปแบบคำตอบนี้ ) นอกจากนี้ยังมีฟังก์ชั่น UIKit ที่NSStringFromCGSize()สำหรับการพิมพ์สวยและผกผันของตนCGSizeFromString()สำหรับการสร้างCGSizestruct จาก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}

ฟังก์ชั่นที่มีประโยชน์อื่น ๆ ( การอ้างอิง CGGeometry )

  • CGRectGetHeight ()
  • CGRectGetWidth ()

6

% @ หมายความว่าคุณกำลังพยายามแทรกสตริง CGSize ไม่ใช่สตริงและไม่สามารถแปลงเป็นสตริงโดยอัตโนมัติได้ นั่นเป็นสาเหตุที่แอปของคุณขัดข้อง แต่คุณต้องบันทึกคุณสมบัติแต่ละรายการแยกกันเช่น

NSLog(@"width is %f, height is %f.", sizeOfTab.width, sizeOfTab.height);

f% ถูกนำมาใช้เพราะความกว้างและความสูงคุณสมบัติเป็นชนิดที่ลอย

สำหรับการแปลงรูปแบบอื่น ๆ โปรดดูเอกสาร: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html


ยินดีต้อนรับสู่ SO +1 สำหรับคำตอบโดยละเอียด
Praveen S

ขอบคุณ. ฉันมองไปรอบ ๆ และมันน่าทึ่งมากที่ได้เห็นว่ามีกี่คนที่ไม่เคยมองเอกสารก่อนที่จะถามคำถาม ฉันใส่ลิงค์ไว้ที่นั่นดังนั้นเราจะไม่ได้รับคำถามอีกว่าจะพิมพ์intอย่างไร
Greg

3

CGSizeมี memebers CGFloatกว้างและความสูงซึ่งเป็นประเภท คุณสามารถพิมพ์ได้โดยใช้สิ่งต่อไปนี้

NSLog(@"Width = %f, height = %f",sizeOfTab.width, sizeofTab.height);

3

ที่นี่ self.view คือมุมมองของ UIView Class คุณสามารถพิมพ์เฟรมใดก็ได้ด้วยบันทึกนี้

      NSLog(@"self.view.Frame=%@", NSStringFromCGRect(self.view.frame));
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.