3

でアクションを作成しました

-(void) ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event

これはちょうどこのように:

self.moveAction = [CCSequence actions:                          
                   [CCMoveTo actionWithDuration:moveDuration position:touchLocation],
                   [CCCallFunc actionWithTarget:self selector:@selector(guyMoveEnded)],
                   nil
                  ];

しかし今、私は次のメソッドを自動呼び出ししたいと思います@selector

-(void)guyMoveEnded:(BOOL)flag AndWhere:(CGPoint)where Andtime:(float)time{
    //do something...
}

どうすればいいですか?私を助けてください、私はセレクターについて混乱しています。

ありがとう!

4

4 に答える 4

10

パラメータをに追加し、NSArrayそれをセレクタの引数として指定できます。

NSArray *params = [NSArray arrayWithObjects:@"a str", [NSNumber numberWithInt:42],myObj];
[self performSelector:@selector(myMethod:)withObject:params];

次に、メソッドの引数を解凍します。

-(void)myMethode:(NSArray*)params
{
    NSString *strArg = [params objectAtIndex:0];
    NSNumber * numVal = [params objectAtIndex:1];
    NSObject *objArg = [params objectAtIndex:2];
    int intArg = [numVal intValue];
    .
    .
    .   
}
于 2012-07-27T07:24:33.887 に答える
3

Appleは、3つ以上の引数を渡す必要がある場合にNSInvocationを使用することをお勧めします。これが非常に良い例です:ダミーのためのNSInvocation?

説明のないその答えからの短い概要:

// Prepare the object
NSMethodSignature * mySignature = [NSMutableArray 
    instanceMethodSignatureForSelector:@selector(addObject:)];
NSInvocation * myInvocation = [NSInvocation
    invocationWithMethodSignature:mySignature];

// Set selector and object
[myInvocation setTarget:myArray];
[myInvocation setSelector:@selector(addObject:)];

// Set arguments
[myInvocation setArgument:&myString atIndex:2];

// Invoke it
[myInvocation invoke];

これは、単にセレクターを呼び出すよりもはるかに多くのコードですがperformSelector:、任意の数の引数を使用してメソッドを呼び出すことができます。これは、Cipramillが示唆しているように、署名を変更して引数の数を減らすことができない場合に特に役立ちます。

于 2012-07-27T07:41:38.467 に答える
1

パラメータを使用してNSDictionaryオブジェクトを準備し、そのディクショナリをセレクタに渡すと、ディクショナリからメソッド内の値を取得できます。以下は参考用です。

 "NSDictionary *dictionary = nil;
  BOOL flag = YES;
  CGFloat time;
  CGPoint pt;
 [dictionary setValue:flag forKey:FIRSTPARAM];
  [dictionary setValue:time forKey:SECONDPARAM];
  [dictionary setObject:point forKey:THIRDPARAM];
[self performSelector:@selector(methodName:) withObject:dictionary];

"

そのクラスのオブジェクトを渡すためのカスタムクラスを作成できます。

于 2012-07-27T07:50:03.303 に答える
-1
[favProductCell.btnAddtoCart addTarget:self action:@selector(arrayForAddToCart:) forControlEvents:UIControlEventTouchUpInside];

[favProductCell.btnAddtoCart setTag:indexPath.row];

-(void)arrayForAddToCart:(id)sender
{
    if (![self.addToCartProductIdArray containsObject:self.favoriteProductArray[[sender tag]]])
        [self.addToCartProductIdArray addObject:self.favoriteProductArray[[sender tag]]];
}
于 2014-03-06T06:58:54.770 に答える