Làm thế nào để in hoặc ghi giá trị của đối tượng CGSize?


88

Tôi đang cố gắng ghi (in) giá trị của đối tượng CGSize như thế này:

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

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

Có gì sai trong mã này không; ứng dụng của tôi gặp sự cố trong khi điều khiển đến với tuyên bố NSLog.

Cảm ơn Prasad


2
NSStringFromCGSize () và cả NSStringFromCGRect ()
Fattie

Câu trả lời:


55

Bạn có thể gọi như sau để in giá trị mà bạn đang có:

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

217

Thử đi

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

Sự cố xảy ra do sizeOfTabkhông có NSStringđịnh dạng.


3
Tuyệt vời, đây là điều mới tôi học được hôm nay. +1, nhưng tôi sẽ không xóa câu trả lời của mình :-P.
Praveen S

@Praveen: Cảm ơn .. Rất vui vì hôm nay tôi đã giúp bạn học được điều gì đó mới ... Chỉ cần trả ơn thôi. Tôi đã và vẫn đang tiếp nhận những thông tin như vậy thông qua SO.
visakh7

1
@ 7KV7 Sự cố xảy ra vì sizeOfTabkhông phải là một đối tượng (bất kỳ đối tượng nào cũng sẽ hoạt động, không chỉ a NSString). CGSizelà một cấu trúc.
albertamg

thanku nó hoạt động tốt, nhưng nó hiển thị {nan, 49}, nan là gì?
Prasad

@Prasad: nan Tôi nghĩ là viết tắt của Not a Number. tabCount là gì? cố gắng khai thác gỗself.frame.size.width/tabCount
visakh7

11

Như JoeBlow đã đề cập ( tôi nhận thấy sau khi nhập và định dạng câu trả lời này ), cũng có hàm UIKit NSStringFromCGSize(), để in đẹp và nghịch đảo của nó CGSizeFromString(), để tạo CGSizecấu trúc từ một NSStringđối tượng.

Apple ghi lại stringthông số như sau:CGSizeFromString(string)

Một chuỗi có nội dung có dạng "{ w , h }", trong đó w là chiều rộng và h là chiều cao. Giá trị wh có thể là giá trị số nguyên hoặc số thực. Ví dụ về chuỗi hợp lệ là @ "{3.0,2.5}". Chuỗi không được bản địa hóa, vì vậy các mục luôn được phân tách bằng dấu phẩy.


Thí dụ

CGSize size = CGSizeFromString(@"{320,568}");
NSLog(@"Pretty printed size: %@", NSStringFromCGSize(size));

Đầu ra

Pretty printed size: {320, 568}

Các chức năng hữu ích khác ( Tham khảo CGGeometry )

  • CGRectGetHeight ()
  • CGRectGetWidth ()

6

% @ có nghĩa là bạn đang cố gắng chèn một chuỗi. CGSize không phải là một chuỗi và không thể tự động chuyển đổi thành một chuỗi. Đó là lý do tại sao ứng dụng của bạn bị treo. Thay vào đó, bạn cần ghi nhật ký các thuộc tính riêng lẻ, như

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

% f được sử dụng vì thuộc tính chiều rộngchiều cao thuộc kiểu float .

Đối với các chuyển đổi định dạng khác, hãy xem tài liệu: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html


Chào mừng đến với SO. +1 để có câu trả lời chi tiết.
Praveen S

Cảm ơn. Tôi đã xem xét xung quanh và thật ngạc nhiên khi thấy có bao nhiêu người không bao giờ thèm xem tài liệu trước khi đặt câu hỏi. Tôi đặt liên kết ở đó để chúng tôi không nhận được câu hỏi khác hỏi làm thế nào để in một int .
Greg

3

CGSizecó chiều rộng và chiều cao memebers thuộc loại CGFloat. Bạn có thể in chúng bằng cách sử dụng sau

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

3

Đây self.view là chế độ xem của UIView Class. Bạn có thể in bất kỳ khung nào với nhật ký này.

      NSLog(@"self.view.Frame=%@", NSStringFromCGRect(self.view.frame));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.