iphone - Cocoa:使用 NSNotification 和 NSDictionary 传递 CGPoint 时出现问题

标签 iphone cocoa cocos2d-iphone

我试图在一个类中名为 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/

相关文章:

iphone - 分段线仅在iPhone上绘制第一段。在模拟器中完美工作

iphone - UIScrolview 优先垂直和水平滚动

iphone - 在 iPhone 上生成单词列表

cocoa - public.composite-content (kUTTypeCompositeContent) 是什么类型的文件?

objective-c - NSOutlineView 中文件夹和子文件夹的对象模型

iphone - 游戏套件中回合制多人游戏的问题

ios - 内在弱引用与非内在弱引用?

ios - 搜索数据模型资源时的 nil 路径

iphone - 如何将 NSData 对象转换为文件输出

iphone - 检查常量是否在运行时在 Obj-C 中定义