Code:
NSString *city = [(NSString*)ABMultiValueCopyValueAtIndex(addressMulti, i) autorelease];
city is an NSString which you've added to the mutable array address.
Later on, you do the following
Code:
NSMutableDictionary *primaryAddress = [address objectAtIndex:0];
The object at index 0 is a string, why are you trying to define a string as a mutable dictionary.