Given a set of random strings, write a function that returns a set that groups all the anagrams together in objective-c
This would be a better way to do the final storage into the dictionary. Attempt to retrieve an existing list. If it does not exist, create it and add it to the dictionary. You can then unconditionally add the current word to the array.

NSString *sortedString = [wordArray componentsJoinedByString:@""];

// Attempt to retrieve existing list
NSMutableArray * anagramStrings = [anagramsDictionary objectForKey:sortedString];
if( !anagramStrings ){
    // If it does not exist, create it and put it into the dictionary
    anagramStrings = [NSMutableArray array];
    [anagramDictionary setObject:anagramStrings forKey:sortedString];
}

// Add to the list
[anagramStrings addObject:word];

[wordArray removeAllObjects];


This avoids doing a copy every time, which in your original code is unnecessary in all cases but one.

Also worth noting is the last line here: 


if(anagramStrings){
    //if anagram(s) of the word is already in the dictionary then add this word to the array
    //and store it back into the dictionary
    [anagramStrings addObject:word];
    [anagramsDictionary setObject:anagramStrings forKey:sortedString];
}



There is no need to put the mutable array back into the dictionary after getting a pointer to it, as you're doing. The array is not removed from the dictionary; your anagramStrings points to that exact same array.