Кажется, вы проходите цикл 4 раза.
Если условие истинно, условный код будет выполняться 4 раза.
Вы создаете индекс 4
.
Вы удаляетеэто.
Во второй раз, когда вы удалите его, вы получите сбой.
Если я правильно понял, что вы хотите сделать, это код:
if ([[objectArray1 objectAtIndex:3] isEqualToString:@"xyz"] &&
objectArray1.count == 5) {
NSMutableIndexSet *indexes = [NSMutableIndexSet indexSetWithIndex:3];
[indexes addIndex:4];
[objectArray1 removeObjectsAtIndexes:indexes];
//less code:
//[objectArray1 removeLastObject];
//[objectArray1 removeLastObject];
}