Cocoa:使用NSNotification和NSDictionary传递CGPoint的问题

gar*_*uan 6 iphone cocoa cocos2d-iphone

我试图在一个类中调用一个名为setPosition的方法中的Notification,它在另一个类中触发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];
}
Run Code Online (Sandbox Code Playgroud)

在另一个类中触发此方法,但会抛出指示的错误

-(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....


}
Run Code Online (Sandbox Code Playgroud)

我一直在挖掘,并找到了这个解决方案,但我仍然得到一个错误.

-(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];
}
Run Code Online (Sandbox Code Playgroud)

这让我疯了.而且让我更加困惑,将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)];
}
Run Code Online (Sandbox Code Playgroud)

摆脱setPosition中的错误,但我仍然搞砸了setViewPointCenter.据我所知,CGPoint和NSPoint应该是相同的,但它看起来并不像.

有没有人有一个如何在字典中传递CGPoint的工作示例?我无法弄清楚.

这适用于iPhone,因为它有所作为.

Ben*_*ieb 13

尝试使用+[NSValue valueWithCGPoint].


Dav*_*ong 6

我使用NSStringFromCGPoint()函数将其转换为字符串,然后使用CGPointFromString()函数将其转换回来.