2014-02-15 2 views
0

이것은 monotouch입니다 (자 마린 스튜디오) 아이 패드 응용 프로그램이미지 로딩 여러 번 Monotouch/자 마린 스튜디오

나는 영상을보고 거기에 140 개 이미지가 있고 그들이 그것을 속도로 사용자를 묻는 설문 조사를 무작위로 표시됩니다. 나는이 이미지들을 폴더에 넣고 pic1.jpg, pic2.jpg, pic3.jpg 등으로 이름을 지었다. 설문 조사를 시작할 때 나는 1-140의 숫자 배열을 무작위로 생성했다. 같은 번호를 가지지 않도록했다. 두 번 (이것은 확인되고 작동 중입니다 ....). 그런 다음 배열을 통해 무작위 순서로 이미지를 표시합니다.

iOS7을 업데이트 한 후 잘못된 이미지가 나타나는 문제가 있습니다. 하나의 테스트에서 여러 번 나타납니다. 나는 이것을 디버깅했으며 단순히 이미지가 다른 이미지로 대체 된 것처럼 보이는 잘못된 이미지 일뿐입니다 ... 예를 들어 이미지 81이 이미지 94가 실제로 나타나야했을 때와 같습니다. 나는 이미지 폴더에있는 모든 이미지를 확인하고 중복 된이 없습니다

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

이 여기

는 평가에 대한 코드입니다 ... 140 개 이미지 12 번 일어났다.

왜 이런 일이 발생하는지 알고 싶습니다.

은 ... @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