C yapılarında hata ayıklamak için, içerdikleri her özellik açıkça yazmak zorunda kalmadan istiyorum.
Yani böyle bir şey yapmak istiyorum:
CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);
Açıkçası '% @' işe yaramayacak, dolayısıyla soru.
C yapılarında hata ayıklamak için, içerdikleri her özellik açıkça yazmak zorunda kalmadan istiyorum.
Yani böyle bir şey yapmak istiyorum:
CGPoint cgPoint = CGPointMake(0,0);
NSLog(@"%@",cgPoint);
Açıkçası '% @' işe yaramayacak, dolayısıyla soru.
Yanıtlar:
Bunu deneyebilirsiniz:
NSLog(@"%@", NSStringFromCGPoint(cgPoint));
Çeşitli CG yapılarını s'ye dönüştüren UIKit tarafından sağlanan bir dizi işlev vardır NSString. Çalışmamasının nedeni %@bir nesneyi göstermesidir. A CGPointbir C yapısıdır ( CGRects ve CGSizes de öyle).
NSPointve sonra çağrıya dönüştürmeniz gerekir NSStringFromPoint. Örneğin:NSStringFromPoint(NSPointFromCGPoint(point))
Gibi birkaç işlevi vardır:
NSStringFromCGPoint
NSStringFromCGSize
NSStringFromCGRect
NSStringFromCGAffineTransform
NSStringFromUIEdgeInsets
Bir örnek:
NSLog(@"rect1: %@", NSStringFromCGRect(rect1));
NSLog(@"%@", CGRectCreateDictionaryRepresentation(rect));
NSRect ile bana yardım etmek için aşağıdaki makroyu kullanıyorum:
#define LogRect(RECT) NSLog(@"%s: (%0.0f, %0.0f) %0.0f x %0.0f",
#RECT, RECT.origin.x, RECT.origin.y, RECT.size.width, RECT.size.height)
CGPoint için benzer bir şey yapabilirsiniz:
@define LogCGPoint(POINT) NSLog(@"%s: (%0.0f, %0.0f)",
#POINT POINT.x, POINT.y);
Aşağıdaki gibi kullanarak:
LogCGPoint(cgPoint);
Aşağıdakileri üretir:
cgPoint: (100, 200)
Bunun için kullanabilirsiniz NSValue. Bir NSValue nesnesi, tek bir C veya Objective-C veri öğesi için basit bir kapsayıcıdır. İnt, float ve char gibi skaler tiplerin yanı sıra işaretçiler, yapılar ve nesne kimlikleri tutabilir.
Misal:
CGPoint cgPoint = CGPointMake(10,30);
NSLog(@"%@",[NSValue valueWithCGPoint:cgPoint]);
ÇIKTI : NSPoint: {10, 30}
Umarım size yardımcı olur.
Stack Overflow'un bozuk RSS'si bu soruyu benim için yeniden dirilttiği için, neredeyse genel çözümüm: JAValueToString
Bu, yazmanıza JA_DUMP(cgPoint)ve cgPoint = {0, 0}giriş yapmanıza olanak tanır .
Evet, aşağıdaki gibi birkaç işlevi kullanabilirsiniz: Öncelikle CGPoint yapısını dizeye dönüştürmeniz gerekir, örneğe bakın
1) NSStringFromCGPoint,
2) NSStringFromCGSize,
3) NSStringFromCGRect,
4) NSStringFromCGAffineTransform,
5) NSStringFromUIEdgeInsets,
Örneğin:
1) NSLog(@"NSStringFromCGPoint = %@", NSStringFromCGRect(cgPointValue));
Bunun gibi...