Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在目标C中将类参数传递给选择器?_Iphone_Objective C_Ios5_Xcode4.2_Kobold2d - Fatal编程技术网

Iphone 如何在目标C中将类参数传递给选择器?

Iphone 如何在目标C中将类参数传递给选择器?,iphone,objective-c,ios5,xcode4.2,kobold2d,Iphone,Objective C,Ios5,Xcode4.2,Kobold2d,我想通过单击按钮来设置类平铺值 如果单击“加号”,它将有一个字符串值=@“+” 如果单击onMinus,它将有一个字符串值=@“-” 这是密码 //Class Tile @interface Tile : TouchableNode { NSString *val; } -(void) setVal:(NSString *)v { val = v; } -(NSString *) getVal { return val; } 另一节课上 我有这样的代码 fo

我想通过单击按钮来设置类平铺值

  • 如果单击“加号”,它将有一个字符串值=@“+”
  • 如果单击onMinus,它将有一个字符串值=@“-”
这是密码

//Class Tile

@interface Tile : TouchableNode {
     NSString *val;
}

-(void) setVal:(NSString *)v
{
    val = v;
}

-(NSString *) getVal
{
    return val;
}
另一节课上

我有这样的代码

for(Tile *tile in player)
{
    if (tile.getVal == @"P") {
        if (pauseStatus == 0) {
            pauseStatus = 1;

            [[CCDirector sharedDirector] pause];
            CGSize size = [[CCDirector sharedDirector] winSize];
            pauseLayer=[[CCLayer alloc] init];
            pauseLayer.anchorPoint=ccp(0,0);
            pauseLayer = [CCLayerColor layerWithColor: ccc4(0, 0, 255, 125) width: 300 height: 150];
            pauseLayer.position = ccp(size.width/2, size.height/2);       
            pauseLayer.isRelativeAnchorPoint = YES;
            [self addChild: pauseLayer z:8];

            //Here are 2 two button that when user click it will have @"+" value or @"-"
            plusBtn = [CCMenuItemImage itemFromNormalImage:@"plus.png" selectedImage:@"plus.png"     target:self selector:@selector(onPlus:)];
            minusBTn = [CCMenuItemImage itemFromNormalImage:@"minus.png" selectedImage:@"minus.png"      target:self selector:@selector(onMinus:)];

            pauseMenu = [CCMenu menuWithItems:plusBtn, minusBTn, nil];
            [pauseMenu alignItemsHorizontally];
            [self addChild:pauseMenu z:10];
        }
    }
}
我有onPlus&onMinus方法,我想把对象平铺发送到那个方法

-(void)onPlus:(Tile *) set
{
    NSString *plus = @"+";
    [set setVal:plus];
}

-(void)onMinus:(Tile *) set
{
    NSString *minus = @"-";
    [set setVal:minus];
}
如何将对象平铺传递给方法??
或者它有另一种方法来实现它???

如果您想将
平铺
对象发送到
onPlus
处理程序,只需将CCMenuItemImage子类化并生成平铺属性:

@interface MyCustomCCMenuItemImage : CustomCCMenuItemImage
@property (nonatomic, retain) Tile* tile;
@end
下面是一个大致的代码示例:

- (void)someMethod
{

    for(Tile *tile in player)
    {
        plusBtn = [MyCustomCCMenuItemImage itemFromNormalImage:@"plus.png"   selectedImage:@"plus.png" target:self selector:@selector(onPlus:)];
        plusBtn.tile = tile ;
    }

}

//Your handler
-(void)onPlus:(id)sender
{
    Tile *myTile = sender.tile;
}

如果要将
Tile
对象发送到
onPlus
处理程序,只需将CCMenuItemImage子类化并生成一个Tile属性:

@interface MyCustomCCMenuItemImage : CustomCCMenuItemImage
@property (nonatomic, retain) Tile* tile;
@end
下面是一个大致的代码示例:

- (void)someMethod
{

    for(Tile *tile in player)
    {
        plusBtn = [MyCustomCCMenuItemImage itemFromNormalImage:@"plus.png"   selectedImage:@"plus.png" target:self selector:@selector(onPlus:)];
        plusBtn.tile = tile ;
    }

}

//Your handler
-(void)onPlus:(id)sender
{
    Tile *myTile = sender.tile;
}

CCMenuItemImage
继承自具有
void*userData
属性的
CCNode
。如果将
tile
分配给
userData
,则可以在
onPlus
/
onMinus
方法中从
(id)发送方
取回它

plusBtn = [CCMenuItemImage itemFromNormalImage:@"plus.png" selectedImage:@"plus.png"     target:self selector:@selector(onPlus:)];
plusBtn.userData = (void*)tile; // You may need a bridge cast in ARC
minusBTn = [CCMenuItemImage itemFromNormalImage:@"minus.png" selectedImage:@"minus.png"      target:self selector:@selector(onMinus:)];
minusBTn.userData = (void*)tile;

-(void)onPlus:(id)senderObj {
    CCNode *sender = (CCNode*)senderObj;
    Tile *myTile = (Tile*)sender.userData; // Again you may need a bridge cast here
}

CCMenuItemImage
继承自具有
void*userData
属性的
CCNode
。如果将
tile
分配给
userData
,则可以在
onPlus
/
onMinus
方法中从
(id)发送方
取回它

plusBtn = [CCMenuItemImage itemFromNormalImage:@"plus.png" selectedImage:@"plus.png"     target:self selector:@selector(onPlus:)];
plusBtn.userData = (void*)tile; // You may need a bridge cast in ARC
minusBTn = [CCMenuItemImage itemFromNormalImage:@"minus.png" selectedImage:@"minus.png"      target:self selector:@selector(onMinus:)];
minusBTn.userData = (void*)tile;

-(void)onPlus:(id)senderObj {
    CCNode *sender = (CCNode*)senderObj;
    Tile *myTile = (Tile*)sender.userData; // Again you may need a bridge cast here
}

对于字符串比较,最好使用

[tile.getVal isEqualToString:@"P"]

因为您使用的方法只有在它是完全相同的字符串(在相同的内存位置)时才有效,而不是其他地方的等效字符串。

对于字符串比较,最好使用

[tile.getVal isEqualToString:@"P"]

因为您使用的方法只有在它是完全相同的字符串(在相同的内存位置)时才有效,而不是其他地方的等效字符串。

这是一个有价值的观察,但是注释是一个更好的地方,因为它不是OP的问题。这是一个有价值的观察,但是注释是一个更好的地方,因为这不是OP的问题啊。。。顺便说一句,当暂停层启动这两个按钮时,屏幕是暂停的,但程序仍在运行。。。换句话说,我想等待按钮的动作,这样在我按下按钮后。。。程序可以连续运行。。。所以我也想知道一个按钮的等待动作功能。如果程序仍然在运行,它不是按照你编写的方式工作吗?您是否有机会尝试
userData
技巧?您的代码正常,但在我的函数完成后,它设置为@“+”或@“-”。。所以我得到了我不想要的值@“P”。所以我想等到我按下按钮。我问的最近两条评论是一个新问题。。。问题是“如何等到CCmenuItemImage被按下?”啊。。。顺便说一句,当暂停层启动这两个按钮时,屏幕是暂停的,但程序仍在运行。。。换句话说,我想等待按钮的动作,这样在我按下按钮后。。。程序可以连续运行。。。所以我也想知道一个按钮的等待动作功能。如果程序仍然在运行,它不是按照你编写的方式工作吗?您是否有机会尝试
userData
技巧?您的代码正常,但在我的函数完成后,它设置为@“+”或@“-”。。所以我得到了我不想要的值@“P”。所以我想等到我按下按钮。我问的最近两条评论是一个新问题。。。问题是“如何等待CCmenuItemImage被按下?”