2009-12-07 3 views
0
NSString *temp = [self randomBallPick:temp]; 

다음과 같은 오류 : 메시지 발현 패스 값에 의한 인수가 아이폰 개발 - 분석 오류

이유

을 정의되지?

-(NSString*) randomBallPick:(NSString*) oneFilename 
{ 

    //create an array of filenames 
    NSMutableArray *imageArray = [[NSMutableArray alloc] init]; 
    for (int c=0;c<37;c++) 
    { 
     NSString *imageName = [NSString stringWithFormat:@"ball_%d.png", c]; 
     [imageArray addObject: imageName]; 
    } 

    //pick one filename 
    int numFileNames = [imageArray count]; 
    int chosen = arc4random() % numFileNames; 
    oneFilename = [imageArray objectAtIndex: chosen]; 
    [imageArray release]; 
    return oneFilename; 
} 
+0

당신이 게시 할 수 있습니다 : 당신이 그것을 주변의 배열을 유지하고 재사용 할 경우

- (NSString*)randomBallPick { [NSString stringWithFormat:@"ball_%d.png", arc4random() % 37]; } 

것은, 나는 이런 식으로 뭔가를 할 거라고 :

나는 다음은 동일한 기능을 제공합니다 생각 -randomBallPick 코드 : 제발? –

+0

방법을 어떻게 정의 했습니까? 문제가 있다고 생각합니다. 이것에 대한 좀 더 많은 컨텍스트가 좋습니다. –

+0

게시하십시오. randomBallPick 메서드는 헤더 에서처럼 정의합니다. - (NSString *) randomBallPick : (NSString *) oneFilename; – omri

답변

1

37 개의 파일 이름 배열을 만든 다음 무작위로 그 중 하나를 반환한다고 말할 수 있습니다.

- (NSString*)randomBallPick 
{ 
    static NSMutableArray *imageArray; 

    if (!imageArray) { 
     imageArray = [[NSMutableArray alloc] init]; 
     for (int c = 0; c < 37; c++) 
     { 
      NSString *imageName = [NSString stringWithFormat:@"ball_%d.png", c]; 
      [imageArray addObject:imageName]; 
     } 
    } 

    //pick one filename 
    NSUInteger numFileNames = [imageArray count]; 
    NSUInteger chosen = arc4random() % numFileNames; 
    return [imageArray objectAtIndex:chosen]; 
} 
+0

감사합니다! btw 나는 또 다른 게시물에 아직이 배열 (고유 한 목적을 위해)에서 고른 볼을 선택하지 않고 반환으로 생각하는 루프를 추가하려고합니다. 두 번째 함수 (재사용 중 하나)에서 구현하는 방법, ? – omri

+0

다른 질문에 대한 답변을 추가했습니다. HTH. –

+0

내가 거기에 게시했습니다. – omri

0

나는 당신의 방법은 포인터를 기대하는 의심 당신은 값으로 데이터를 전달한다.

temp이 메소드에 전달되는 라인 앞에 정의되어 있는지 확인하십시오.

이 줄 앞에 temp을 정의합니까? C에서 (objective-c에 대해 확실하지 않음) 변수가 사용되기 전에 변수의 정의가 컴파일러에 표시되지 않으면 변수 유형이 int으로 기본 설정되므로 randomBallPick:(NSString*) 대신 randomBallPick:(int)이 호출됩니다.


당신이 우리에게 randomBallPick:의 기능 서명 및 temp의 정의를 보여 주면 그것은 도움이 될 것이다.

randomBallPick:(NSString*)temp : tempNSString*이라고 가정하면 어떻게됩니까? temp이 제대로 초기화 되었습니까? 당신은 아무것도 할에 전달하는 문자열을 사용하지 않는

2

또한, 이미 temp이 줄 앞에 정의가 가정, 당신은 ... 다시 temp을 재정의합니다. 당신이 그것을 통과 할 필요가 있지만, 방법 내부를 초기화해야처럼 보인다, autoReleasereturn을 설정할 그것은

당신은 컴파일러가 temp이 존재 satistifed되도록 그 라인에 temp를 정의하고 있지만, 만 너무 초기화 때

그것은 아직 유효한 포인터가 아닙니다.

희망이 있습니다. 이것은 무슨 일이 일어나고 있는지에 대한 나의 교육받은 추측입니다. 객관적인 전문가에 의해 시정 해 기쁘다.