2014-02-15 78 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