NSArray вызовет исключение, если вы получите доступ к чему-либо вне его границ.Если массив пуст, доступ к элементу с индексом 0 выходит за его пределы.Вы можете проверить, содержит ли массив элементы, вызвав [array count]
например:
NSArray *array = [mapView.annotations filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(self isKindOfClass: %@)", [MapLocation class]]];
if([array count] > 0) // No need to check if the array is != NULL, the runtime won't send messages to NULL
{
annotation = [array objectAtIndex:0];
}