Excellent. The "continue" is a command you can use inside loops to skip to the next iteration of the loop; the rest of the loop after "continue" is skipped for this block.
When a block hits the bottom you can add it to a different array - maybe called stoppedBlocks. It'll have to be an instance variable like blockArray, and you'll have to init it somewhere.
Code:
if (newCenter.y > 420) {
[stoppedBlocks addObject: block];
[self addOneBlock];
continue;
}
//more moveBlocks stuff
//at the end of moveBlocks, remove all stoppedBlocks from the blockArray
[blockArray removeObjectsInArray:stoppedBlocks];
}
You'll also have to write the method createOneBlock to create one new block. it'll look a lot like createBlocks, but without the loop.
Note this still won't make blocks stop when they hit other blocks, that'll have to wait until this is working.
Edit: I just realized that it'll crash when you try to add a block to the array while still looping through it. Post your moveBlocks code after you add this code, and I'll fix the loop so you can add blocks while looping.