Универсальное решение для хранения CGPoint в NSArray в Cocoa и Cocoa Touch?

У меня есть класс, который я хотел бы разделить между приложениями Cocoa и Cocoa Touch. Этот класс вычисляет различные CGPoint и сохраняет их в массиве. В Какао есть [NSValue valueWithPoint]. В Cocoa Touch есть [NSValue valueWithCGPoint].

Есть ли какое-либо решение, которое позволило бы мне обойти эти специфичные для фреймворка методы?


person anna    schedule 11.07.2012    source источник


Ответы (1)


Вы можете создать категорию на NSValue, чтобы добавить методы valueWithCGPoint: и CGPointValue в Cocoa.

#if ! TARGET_OS_IPHONE
@interface NSValue (MyCGPointAddition)
+ (NSValue *)valueWithCGPoint:(CGPoint)point;
- (CGPoint)CGPointValue;
@end
#endif
#if ! TARGET_OS_IPHONE
@implementation NSValue (MyCGPointAddition)
+ (NSValue *)valueWithCGPoint:(CGPoint)point {
    return [self valueWithPoint:NSPointFromCGPoint(point)];
}
- (CGPoint)CGPointValue {
    return NSPointToCGPoint([self pointValue]);
}
@end
#endif

Или вы можете использовать valueWithBytes:objCType: и getValue:.

CGPoint point = {10, 10};
NSValue *value = [NSValue valueWithBytes:&point objCType:@encode(CGPoint)];
// ...
[value getValue:&point];
person Nicolas Bachschmidt    schedule 11.07.2012
comment
Потрясающий! Я воспользовался последним предложением. С категорией мне все равно пришлось бы явно #импортировать один из фреймворков, чего я хотел избежать. Спасибо. - person anna; 11.07.2012