I'm still suspect of this line:
Code:
ySpeed += 0;
//which is the same as
ySpeed = ySpeed +0;
//which is the same as
//ySpeed = ySpeed;
Which is the same as doing nothing. Whatever that section is supposed to do is not getting done.
Also in characterJump you copy jumpCounter into the local variable setter make some changes and then copy it back; that seems needlessly confusing when you can just use jumpCounter.
I doubt that either for these are the root of your problem; you really need to use breakpoints or NSLogs to figure out what your code is really doing, and how it's different than what you want.
For example: He cannot jump whilst standing on a block. Why not? Does characterJump not get called, or does characterJump not work properly when on a block? If it's not called, why not etc. etc.