2014-02-15 3 views
0

Это для MonoTouch (Xamarin студия) IPad приложениеизображения Загрузка несколько раз MonoTouch/Xamarin Студия

У меня есть опрос, который предлагает пользователю смотреть на изображение и оценить его, есть 140 изображений, и они показано случайным образом. У меня есть эти изображения в папке и назвал их pic1.jpg, pic2.jpg, pic3.jpg и т. Д. В начале опроса я произвольно генерировал массив чисел от 1-140, убедившись, что у НЕ того же числа дважды (это проверено и работает ...). Затем я просматриваю массив и показываю изображения в случайном порядке.

После обновления iOS7 у меня возникают проблемы с неправильным изображением. Он будет отображаться несколько раз в одном тесте. Я отлаживал это, и это просто неправильный образ, который появляется, почти так же, как если бы изображение было заменено другим изображением ... Например, когда изображение 81 должно было показать изображение 94, действительно было. Это произошло 12 раз в 140 изображений ...

Вот код для рейтинга:

public override void ViewDidLoad() 
{ 
int[] Num2 = new int[141]; //array for random numbers 
int ic = 0; //int count 
rand2(ref Num2); //routine to generate random numbers... 
this.btnSEG.ValueChanged += delegate(object sender, EventArgs e){ //submit the rating 
ic = ic + 1; //increase the count 
imgSorce.Image.Dispose(); //clear the current image 
using (var pool = new NSAutoreleasePool()) { //put this in to prevent leaks 
this.imgSorce.Image = UIImage.FromFile ("image/pic" + Num2[ic] + ".jpg"); //display the next image 
}; 
}; 

Я проверил все изображения в папке изображения, и нет никаких дубликатов.

Любые идеи, почему это происходит?

Обновлено

@Krumelur попросил код для генерации случайного нумерованного массива ... Вот он ...

private void rand2 (ref int[] rn) 
{ 
int i = 0; 
int icount = 0; 
for (i = 0; i <= 139;) 
{ 
int n = 0; 
rand3(ref n); 
for(icount = 0; icount <= 139;) 
{ 
if (n == rn[icount]) 
{ 
icount = 141; 
} 
icount = icount + 1; 
if (icount == 140) 
{ 
rn[i] = n; 
i = i+1; 
} 
} 
}; 
rn[140] = 0; 
} 

А вот rand3, что было указано выше ...

private void rand3 (ref int num) 
{ 
Random r = new Random(); 
num = r.Next(1, 141); 
} 
+0

Просьба указать код для 'rand2()'. Вы также можете отлаживать себя и проверять конкуренцию «Num2» на наличие дубликатов, потому что я уверен, что это ваша проблема. – Krumelur

+0

@ Krumelur, Хороший вопрос. Я обновил вопрос, включив этот код. Я должен упомянуть, что я проверил этот код, и он дает мне правильный результат (случайные числа без дубликатов). Спасибо за вашу помощь! – JamesCBaird

ответ

0

Лично я считаю, что лучшим решением является создание вашего массива, заполнение его последовательными числами, а затем перетасовка элементов массива , Это не гарантирует дубликатов. Вот пример кода для этого:

int[] Num2 = new int[141]; //array for random numbers 
// Fill the array with numbers from 0 to 140 
for (int i = 0; i < Num2.Length; i++) { 
    Num2[i] = i; 
} 

// Shuffle Array 
Random rnd = new Random((int)DateTime.Now.Ticks); // seed the random number generator based on the time so you don't get the same sequence repeatedly 
for (int i = Num2.Length; i > 1; i--) { 
    // Pick random element to swap 
    int j = rnd.Next(1, 141); 
    // Swap 
    int temp = Num2[j]; 
    Num2[j] = Num2[i - 1]; 
    Num2[i-1] = temp; 
} 
+0

Спасибо @jgoldberger. Хорошо видеть оптимизированный код. Как я уже упоминал, я проверил массив и не имел повторяющихся чисел. Чтобы проверить это, я создал ярлык над изображением, и он подтвердил, что должно появиться другое изображение. Наконец, я попробовал ваш код, чтобы убедиться, что это не проблема, и, как ожидалось, это не решило проблему. – JamesCBaird

+0

Вот обновление ... Когда отображается неправильное изображение, если я поставлю iPad спать или он заснет, а затем я его разбужу, он покажет правильное изображение ... Нечеткие, любые мысли @ Krumelur или @jgoldberger? – JamesCBaird

Смежные вопросы