NSNotification的userinfo示例?

5

我有一个对象数组,这些对象使用CGPoints定位。在我的应用程序的某些时刻,数组中的一个对象需要通知其他非数组对象它的位置。我知道NSNotification是最好的方法,但我找不到一个像样的例子来作为通知的“发送者”和“接收者”,这个例子可以将CGPoint作为userinfo进行包装和解包。有人能帮忙吗?

2个回答

15
在 Cocoa Touch 中(但不是 Cocoa),可以使用 CGPoint 进行包装和解包。
+ (NSValue *)valueWithCGPoint:(CGPoint)point
- (CGPoint)CGPointValue

可以将 NSValues 存储在作为 userinfo 参数传递的 NSDictionary 中。

例如:

NSValue* value = [NSValue valueWithCGPoint:mypoint];
NSDictionary* dict = [NSDictionary dictionaryWithObject:value forKey:@"mypoint"];

在您的通知中:

NSValue* value = [dict objectForKey:@"mypoint"];
CGPoint newpoint = [value CGPointValue];

2
在Cocoa中,您可以使用NSPointFromCGPoint,然后使用NSValue的valueWithPoint:和pointValue。 - Peter Hosey
或者您可以使用预定义的NS_BUILD_32_LIKE_64进行构建,在这种情况下,NSPoint是CGPoint的typedef(在64位构建中始终如此)。 - Jens Ayton

1
传递通知时,userinfo对象只是一个NSDictionary。将CGPoint传递给userinfo的最简单方法可能是使用-numberWithFloat:将X和Y坐标封装到NSNumbers中。例如,您可以使用Xpos和Ypos作为键,在userinfo字典上使用setObject:forKey:。
您可能可以将其封装到NSMutableDictionary的漂亮类别中,其中包含像setFloat:forKey之类的方法...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接