I have been struggling all day with one of that simple mistakes that makes you loose a lot of time while trying to figure out where the error actually is. It was about a NSDictionary. I used this dictionary to set the headers for a communication, and every time I found that the headers where not there. What was happening?

The initialization code of the NSDictionary was something similar to this:

NSDictionary * headers = [NSDictionary dictionaryWithObjectsAndKeys:
    object1, key1,
    object2, key2,
    object3, key3,
    ...,
    nil];

The problem was that dictionaryWithObjectsAndKeys actually stops adding items to the dictionary as soon as it finds a nil entry, and due to a unchecked condition, object1 was nil in certain situations, thus giving me an empty NSDictionary. The lesson learned is: if you use dictionaryWithObjectsAndKeys: to initialize a NSDictionary, you must put your checks in place to make sure that all of the items you are initializing the dictionary with are valid, non-nil objects.

Hope this helps!