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 :(得分:2)
你没有使用你传入的字符串来做任何事情。好像你不需要传入它但应该在方法中初始化它,设置它,autoRelease
和return
它
您在该行上定义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
,假设temp
是NSString*
? temp
是否已正确初始化?
此外,假设您已经在此行之前定义了temp
,那么您将再次重新定义temp
...