Xamarin.ios 多次加载图像Monotouch/Xamarin Studio

Xamarin.ios 多次加载图像Monotouch/Xamarin Studio,xamarin.ios,uiimage,xamarin,xamarin-studio,image-loading,Xamarin.ios,Uiimage,Xamarin,Xamarin Studio,Image Loading,这是一款monotouch(Xamarin Studio)iPad应用程序 我有一个调查,要求用户看一张图片并给它打分,共有140张图片,它们是随机显示的。我将这些图像放在一个文件夹中,并将它们命名为pic1.jpg、pic2.jpg、pic3.jpg等。在调查开始时,我随机生成一个1-140之间的数字数组,确保不会有两次相同的数字(这已验证并正在工作……)。然后我遍历数组,以随机顺序显示图像 在iOS7更新之后,我发现错误的图像出现了问题。它将在一次测试中显示多次。我已经调试过了,只是出现了一

这是一款monotouch(Xamarin Studio)iPad应用程序

我有一个调查,要求用户看一张图片并给它打分,共有140张图片,它们是随机显示的。我将这些图像放在一个文件夹中,并将它们命名为pic1.jpg、pic2.jpg、pic3.jpg等。在调查开始时,我随机生成一个1-140之间的数字数组,确保不会有两次相同的数字(这已验证并正在工作……)。然后我遍历数组,以随机顺序显示图像

在iOS7更新之后,我发现错误的图像出现了问题。它将在一次测试中显示多次。我已经调试过了,只是出现了一个错误的图像,就好像这个图像被另一个图像替换了一样。。。例如,当图像81应该出现时,图像94实际出现了。这在140张图片中发生了12次

以下是评级代码:

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;
}

就我个人而言,我认为更好的解决方案是创建数组,用序列号填充它,然后洗牌数组元素。这保证了没有重复。下面是执行此操作的示例代码:

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;
}
int[]Num2=新的int[141]//随机数数组
//用0到140之间的数字填充数组
对于(int i=0;i1;i--){
//选择要交换的随机元素
int j=下一个(1141);
//交换
内部温度=Num2[j];
Num2[j]=Num2[i-1];
Num2[i-1]=温度;
}

请显示
rand2()
的代码。您也可以自己调试并检查
Num2
的内容是否存在重复项,因为我很确定这就是您的问题所在。@Krumelur,问得好。我已经更新了问题以包含此代码。我应该提到,我已经测试了这段代码,它给了我正确的结果(没有重复的随机数)。谢谢你的帮助!谢谢@jgoldberger。很高兴看到优化的代码。正如我提到的,我已经检查了数组,没有重复的数字。为了进一步验证这一点,我在图像上创建了一个标签,它确认了另一个图像将出现。最后,我尝试了你的代码,以确保这不是问题,正如预期的那样,它没有解决问题。。。当显示错误的图像时,如果我将iPad置于睡眠状态或它进入睡眠状态,然后我将其唤醒,它将显示正确的图像。。。奇怪,有什么想法@Krumelur或@jgoldberger?
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;
}