2013-05-09 3 views
1

У меня есть 7 методов в классе. Когда я получаю конкретное сообщение, я должен случайно вызвать метод из этих 7 методов. Мой пример кода:Случайно вызывать метод

-(void)poemAbcd{ 

    UIImage *image = [UIImage imageNamed: @"abcd_bg.png"]; 
    [backgroundImage setImage:image]; 

    [self changeMumuPosition:80 with:220]; 
} 

-(void)poemHumptyDumpty{ 

    UIImage *image = [UIImage imageNamed: @"humpty_dumpty.png"]; 
    [backgroundImage setImage:image]; 

    [self changeMumuPosition:80 with:170]; 
} 

-(void)poemBlackship{ 

    UIImage *image = [UIImage imageNamed: @"black_sheep.png"]; 
    [backgroundImage setImage:image]; 

    [self changeMumuPosition:66 with:229]; 
} 

-(void)poemRowRow{ 

    UIImage *image = [UIImage imageNamed: @"boat_bg.png"]; 
    [backgroundImage setImage:image]; 

    [self changeMumuPosition:144 with:211]; 
} 

-(void)poemHappy{ 

    UIImage *image = [UIImage imageNamed: @"boat_bg.png"]; 
    [backgroundImage setImage:image]; 

    [self changeMumuPosition:144 with:211]; 
} 

-(void)poemItsyBitsy{ 

    UIImage *image = [UIImage imageNamed: @"boat_bg.png"]; 
    [backgroundImage setImage:image]; 

    [self changeMumuPosition:144 with:211]; 
} 

-(void)poemTwinkleTwinkle{ 

    UIImage *image = [UIImage imageNamed: @"twincle_twincle_little_star.png"]; 
    [backgroundImage setImage:image]; 

    [self changeMumuPosition:70 with:222]; 
} 

В следующий метод, который я хочу, чтобы вызвать метод случайным образом из этих 7 методов.

-(void)poemRandom{ 

     //Call a method randomly from those 7 methods 

} 

Как я могу это сделать? Заранее спасибо за помощь.

+0

Что вы подразумеваете под "Randomly" здесь? – Bhavin

+6

Вместо случайного вызова метода, поскольку все они выполняют одну и ту же задачу (только некоторую разницу в данных), вы можете инкапсулировать данные и произвольно выбирать, какой набор данных отображать вместо этого. – nhahtdh

ответ

1

небрежного способом сделать это:

-(void)poemRandom{ 
    int nr = arc4random() % 7; 
    if (nr == 0) [self poemAbcd]; 
    else if (nr == 1) [self poemHumptyDumpty]; 
    else if (nr == 2) [self poemBlackship]; 
    //and so on 
} 

Надеется, что это помогает

+0

Большое спасибо. – Leo

6

Один из способов сделать это - добавить указатели на объекты в массив и выбрать один из них. SEL способ обернуть селекторы в Objective-C, так что вы можете использовать что-то вдоль линий

// edited, fixed data structure, props to xlc 
// don't forget to set array size according to function count 
SEL funcionsArray[7] = { @selector(poemAbcd), @selector(poemHumptyDumpty), /* etc */ }; 
// randomIndex is a randomly selected number from 0 to [number-of-selectors] - 1 
SEL randomSel = funcionsArray[randomIndex]; 
[self performSelector:randomSel]; 
+3

вы не можете сделать это, потому что 'SEL' не является объектом objc. однако вы можете иметь 'SEL array [7]' –

+0

... и вам нужно добавить int randomIndex = arc4random()% [functionsArray count]; –

+0

@xlc, спасибо за исправление. Случайное число было тривиальностью, поэтому я решил исключить его из примера кода. – Alexander

0

Использованию

NSUInteger N = whatever; 
NSUInteger randomIndex = arc4random_uniform((u_int32_t)N); 

, чтобы получить ваш единый случайный индекс.

Затем используйте это для доступа к массиву указателей на функции или желательно просто использовать индекс для создания самих данных, поскольку @nhahtdh предлагается в комментариях (это звучит намного проще).

Смежные вопросы