вы отлаживали свой код ??вы получаете повторяющиеся значения из-за этих строк
for (int i=0; i<[tempArray count]-1; i++){
char alphabet = [[tempArray objectAtIndex:i] characterAtIndex:0];
NSString *uniChar = [NSString stringWithFormat:@"%C", alphabet];
if (![Frstname containsObject:uniChar]){
[Frstname addObject:uniChar];
}
здесь вы запускаете цикл for в другую сторону цикла loop.so, он будет вызываться для каждой итерациивместо цикла for используйте
char alphabet = [[[row valueForKey:@"FirstName"] characterAtIndex:0];
NSString *uniChar = [NSString stringWithFormat:@"%C", alphabet];
if (![Frstname containsObject:uniChar]){
[Frstname addObject:uniChar];
Я надеюсь, что вы пишете код, чтобы получить уникальные первые символы ...