iphone Development - проанализировать ошибку - PullRequest
0 голосов
/ 07 декабря 2009
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 ]

2 голосов
/ 07 декабря 2009

Вы не используете передаваемую строку, чтобы что-то сделать. Похоже, вам не нужно передавать его, но следует инициализировать его внутри метода, установить его, autoRelease и return it

Вы определяете temp в этой строке, так что компилятор убедился, что temp существует, но когда он только инициализирован, поэтому он еще не является действительным указателем.

Надеюсь, это имеет смысл. Это мое обоснованное предположение о том, что происходит. Рад быть исправленным объективным гуру.

1 голос
/ 07 декабря 2009

Насколько я могу судить, вы создаете массив из 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 голосов
/ 07 декабря 2009

Я подозреваю, что ваш метод ожидает указатель и вы передаете данные по значению.

Убедитесь, что перед строкой, в которой вы передаете его в ваш метод, определено temp.

Вы определяете temp перед этой строкой? В C (не уверен насчет target-c), если компилятор не видит определение переменной до того, как переменная используется, он по умолчанию устанавливает тип переменной int, поэтому он вызывает randomBallPick:(int) вместо randomBallPick:(NSString*).


Будет полезно, если вы покажете нам сигнатуру функции randomBallPick: и определение temp.

Ваш метод выглядит следующим образом: randomBallPick:(NSString*)temp, предполагая, что temp равен NSString*? temp правильно инициализирован?

Кроме того, если вы уже определили temp до этой строки, вы снова переопределяете temp ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...