The Apple Iphone comes with an annoying bug - it matches all the digits of the incoming number on calls and sms's to the stored number, instead of only the last 7 digits.
So if you've stored a number as 0300 xxx-xxxx, incoming sms's won't display the contact name, as the number is in the form +92300 xxx-xxxx.
To fix the international number not matching the stored #:
First, update your iphone to latest firmware in itunes - do a restore, not a upgrade.
Use http://www.ziphone.org/ to unlock and jailbreak.
Go to Installer.app, install BSD subsystem from the System packages
This is a 5.2 mb download, so make sure the iphone doesn't go to sleep - either extend the timeout, or keep touching the screen to stop the iphone from powering down and cancelling the download.
Exit Installer.app, Restart phone.
Go to the iClarified menu in Installer.app, and install Tim Hueg's Iphone fix - each firmware has a different fix, so make sure you've got the right onw.
Exist Installer, restart phone.
Thats it! The iphone will now match numbers like a regular phone.