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

以下错误: 传递按值在消息表达式的说法是不明确的iPhone开发 - 分析错误

为什么呢?

-(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

你能后的代码为-randomBallPick:拜托? – 2009-12-07 01:28:34

+0

您是如何定义该方法的?我会想象问题在那里。更多的情况下,这也会很好。 – 2009-12-07 01:29:53

+0

发布。 randomBallPick方法我在头文件中定义如下 - (NSString *)randomBallPick:(NSString *)oneFilename; – omri 2009-12-07 01:38:05

回答

1

据我可以告诉你正在创建一个37个文件名的数组,然后随机返回其中一个。

我认为有以下提供相同的功能:

- (NSString*)randomBallPick 
{ 
    [NSString stringWithFormat:@"ball_%d.png", arc4random() % 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

谢谢!顺便说一句我想在另一篇文章中添加一个循环,保持列表尚未挑选的球在这个数组(为了独特的目的),并选择它作为回报,任何想法如何在第二个函数(重用一) ? – omri 2009-12-07 02:33:57

+0

我为你的其他问题添加了一个答案。 HTH。 – 2009-12-07 03:26:10

+0

我发布你在那里。 – omri 2009-12-07 04:18:25

0

我怀疑你的方法需要一个指针,并且你正在按值传递数据。

确保您已将temp定义在传递给方法的行之前。

您是否在此行之前定义了temp?在C中(不确定关于objective-c)如果编译器在变量被使用之前没有看到变量的定义,它默认变量的类型为int,所以它调用randomBallPick:(int)而不是randomBallPick:(NSString*)


如果你告诉我们的randomBallPick:函数签名和temp定义这将有助于。

您的方法是否如下所示:randomBallPick:(NSString*)temp,假设tempNSString*temp是否正确初始化?

此外,假设你已经有了temp这行之前定义的,你又重新定义temp ...

2

你不使用你传递在做任何事情的字符串。好像你不需要在它传递而应该初始化它里面的方法,设置它,autoReleasereturn

你在该行因此编译器satistifed是temp存在定义temp但是当它只是初始化等等这还不是一个有效的指针。

希望是有道理的。这是我对有关事情的猜测。很高兴能够被客观的C古鲁修正。