iphone开发 - 分析错误

时间:2009-12-07 01:24:33

标签: iphone objective-c cocoa cocoa-touch

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

3 个答案:

答案 0 :(得分:2)

你没有使用你传入的字符串来做任何事情。好像你不需要传入它但应该在方法中初始化它,设置它,autoReleasereturn

您在该行上定义temp,因此编译器满意地temp存在,但是当它仅被初始化时所以它还不是有效的指针。

希望这是有道理的。这是我对正在发生的事情的有根据的猜测。很高兴被客观的大师纠正。

答案 1 :(得分: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];
}

答案 2 :(得分:0)

我怀疑你的方法需要一个指针,而你是按值传递数据。

请确保在将其传递给方法的行之前定义了temp

你在这行之前定义temp吗?在C(不确定objective-c)中,如果编译器在使用变量之前没有看到变量的定义,则默认变量类型为int,因此它调用randomBallPick:(int)而不是randomBallPick:(NSString*)


如果您向我们展示randomBallPick:的函数签名和temp的定义,那将会有所帮助。

您的方法是这样的:randomBallPick:(NSString*)temp,假设tempNSString*temp是否已正确初始化?

此外,假设您已经在此行之前定义了temp,那么您将再次重新定义temp ...