我试图在一个类中名为 setPosition 的方法中触发通知,该方法会触发另一个类中的 setViewPointCenter。但是,我正在尝试将 CGPoint 与它一起发送。但 Xcode 一点也不喜欢它。
-(void)setPosition:(CGPoint)point
{
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"sp", point, nil];
[[NSNotificationCenter defaultCenter]
postNotificationName:@"SpriteDidSetPosition"
object:self
userInfo:dict];
[super setPosition:point];
}
在另一个类中触发此方法,但抛出指示的错误
-(id) init{
// Usual stuff, blah blah blah...
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(setViewPointCenter:)
name:@"BownceSpriteDidSetPosition"
object:nil];
}
-(void) setViewPointCenter:(NSNotification *)notification
{
// ERROR: Invalid Initializer
CGPoint point = [[notification userInfo] valueForKey:@"sp"];
// more code here....
}
我一直在挖掘,并找到了这个解决方案,但我仍然收到错误。
-(void)setPosition:(CGPoint)point
{
// ERROR: Incompatile type for argument 1 of "Value With Point"
NSValue *pointAsObject = [NSValue valueWithPoint:point];
NSDictionary *dict = [[NSDictionary alloc]
initWithObjectsAndKeys:@"sp",
pointAsObject,
nil];
[[NSNotificationCenter defaultCenter]
postNotificationName:@"SpriteDidSetPosition"
object:self
userInfo:dict];
[super setPosition:point];
}
这让我发疯。让我更加困惑的是,像这样将 CGPoint 更改为 NSPoint
-(void)setPosition:(NSPoint)point
{
NSValue *pointAsObject = [NSValue valueWithPoint:point];
NSDictionary *dict = [[NSDictionary alloc] init];
[dict initWithObjectsAndKeys:@"sp", pointAsObject, nil];
[[NSNotificationCenter defaultCenter]
postNotificationName:@"SpriteDidSetPosition"
object:self
userInfo:dict];
[super setPosition:CGPointMake(point.x, point.y)];
}
解决了setPosition中的错误,但我仍然被setViewPointCenter搞砸了。据我了解,CGPoint 和 NSPoint 应该等于同一件事,但看起来并非如此。
有人有如何在字典中传递 CGPoint 的工作示例吗?我想不通。
这是针对 iPhone 的,以防有所不同。
最佳答案
尝试使用+[NSValue valueWithCGPoint]
。
关于iphone - Cocoa:使用 NSNotification 和 NSDictionary 传递 CGPoint 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1597147/