Так или иначе, вы, кажется, неправильно инициализируете свой объект userInfo. Строка как дано:
NSDictionary * userInfo = [NSDictionary dictionaryWithObject:targetURL
forKey:@"state"];
Создает автоматически выпущенный NSDictionary и сохраняет его в локальной переменной. Значение не будет распространяться до вашей переменной-члена.
Предположим, что это фрагмент, а затем, например,
self.userInfo = userInfo;
для присвоения локального члена, сохраняя его при этом, тогда ваш код должен сгенерировать исключение в этой строке:
[userInfo setValue:status forKey:@"state"];
Так как он пытается мутировать неизменный объект. Поэтому гораздо более вероятно, что значение userInfo не сохраняется, и в этот момент вы обмениваетесь сообщениями.
Итак, я думаю, что - предполагая, что userInfo объявлен как свойство типа 'retain', вы хотите заменить:
NSDictionary * userInfo = [NSDictionary dictionaryWithObject:targetURL
forKey:@"state"];
С:
self.userInfo = [NSMutableDictionary dictionaryWithObject:targetURL
forKey:@"state"];