Попробуйте, это выглядит очень похоже на вашу логику, но (1) он использует NSNumbers в качестве ключей, что имеет немного больше смысла, (2) проще обрабатывает условие отсутствующего набора, но просто добавляет набор, и ( 3) несколько разбивает исходные строки для облегчения отладки ...
NSArray *inputStrings = // however these are initialized goes here
NSMutableDictionary *result = [NSMutableDictionary dictionary];
for (NSString *currentString in inputStrings) {
NSInteger currentWordLength = currentString.length;
wordIndex = [NSNumber numberWithInt:currentWordLength];
NSMutableSet *wordSet = [result objectForKey:wordIndex];
if (!wordSet) {
wordSet = [NSMutableSet set];
[result setObject:wordSet forKey:wordIndex];
}
[wordSet addObject:currentWord];
}
Если после запуска у вас все еще есть пустой словарь, может быть проще наблюдать за тем, что происходит, проходя через него.