This is actually pretty easy to do with a NSArray. For easiest understanding lets create two arrays.
One for images and one for sound.
NSArray* buttonImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"imag01.jpg"],
[UIImage imageNamed:@"imag02.jpg"],[UIImage imageNamed:@"imag03.jpg"][UIImage imageNamed:@"imag04.jpg"], nil];
NSArray* buttonSounds = [NSArray arrayWithObjects:[same idea as the uiimage, i don\'t know what you are using to load sound], nil];
Then use arc4random to generate random numbers:
int randomNumber = arc4random()%4;
Then use the number you just generated to call out a image and sound and apply it the uibutton
UIImage* image = [buttonImages objectAtIndex:randomNumber];
[oneButton setImage:image forState:UIControlStateNormal];
Again do the same thing for sound and attach the property of the sound according to the same randomNumber
we just generated. Just make sure the images array and sound array line up according to which image is the correct sound.
I couldn't write code for generating random sound for you because I don't understand how you are loading sound. So I am using UIImages as an example. So to point you in the right direction replace UIImage code with sound code, to apply the same idea.
To check if the sound match, i'd check if [buttonSound objectAtIndex:randomNumber];
is equal the one attached to the button that the user pressed.