потерять мою строку - PullRequest
       2

потерять мою строку

0 голосов
/ 13 октября 2010

У меня проблема с созданием и сравнением строки, которая, похоже, теряет ее содержимое. В настоящее время у меня есть это:

switch (creditPos) 
{
    case 0:
        [creditCart.faceImage setImage:[NSString stringWithFormat:@"%@credits_face1.png", _director.platformPrefix]];
        break;
    case 1:
        [creditCart.faceImage setImage:[NSString stringWithFormat:@"%@credits_face2.png", _director.platformPrefix]];
        break;
    case 2:
        [creditCart.faceImage setImage:[NSString stringWithFormat:@"%@credits_face3.png", _director.platformPrefix]];
        break;
    case 3:
        [creditCart.faceImage setImage:[NSString stringWithFormat:@"%@credits_face4.png", _director.platformPrefix]];
        break;
    case 4:
        [creditCart.faceImage setImage:[NSString stringWithFormat:@"%@credits_face5.png", _director.platformPrefix]];
        break;
    default:
        break;
}

faceImage - это объект, который я создал, и внутри функции для setImage у меня есть ...

- (void)setImage:(NSString *)inImageName {

NSLog(@"Before Break");

// By default set the scale to 1.0f and the filtering to GL_NEAREST
if(![imageName isEqualToString:inImageName])
{
    NSLog(@"Hit");}

Проблема, с которой я сталкиваюсь, заключается в том, что когда я передаю строку, используя строку NSString stringWithFormat, она будет работать, возможно, 5-8 раз, прежде чем каким-либо образом вызывать ошибки и посылать что-то совершенно случайное в функцию, например -36.657.

Как это возможно? Ничто в параметрах не меняется, поскольку _director.platformPrefix устанавливается в начале программы и никогда не изменяется. Единственное, что меняется, - это выбор creditPos со строкой для создания + перехода к функции. Каким-то образом создаваемая строка после некоторых итераций просто теряет смысл, и попытка сравнить ее с последней переданной строкой приводит к сбою кода без каких-либо ошибок.

Справка: (

Ответы [ 4 ]

0 голосов
/ 13 октября 2010

Я согласен с Ортвином; похоже, что platformPrefix не сохраняется должным образом, и ему удается некоторое время оставаться нетронутым, прежде чем перезаписать.

0 голосов
/ 13 октября 2010

Как вы назначаете inImageName для imageName.Если вы не используете свойство и не сохраняете его, тогда ваша строка inImageName получает сборщик мусора.Метод stringWithFormat вернет автоматически освобожденную строку, которая будет очищена автоматически, если вы не сохраните ее.

Либо создайте в своем заголовке:

@property (nonatomic, retain) NSString *imageName;

и в своей реализации:

@synthesize imageName;

Или добавьте сохранение [inImageName];где-то там, когда вы назначаете его для imageName.(Просто убедитесь, что вы освободили строку imageName перед ее назначением и в своем методе dealloc.)

0 голосов
/ 13 октября 2010

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

NSString *myString = [[NSString alloc] initWithFormat:@"%@credits_face%d.png",_director.platformPrefix, creditPos+1];
[creditCart.faceImage setImage:myString];

Затем метод setImage освобождает строку.

0 голосов
/ 13 октября 2010

Звучит так, будто одна из струн была сдвинута между ними.Возможно, чрезмерный выпуск или неправильная реакция на предупреждения памяти или viewDidUnload.

В целях отладки попытайтесь сохранить _director.platformPrefix и распечатайте retainCount этого объекта.Если проблема исчезнет, ​​у вас действительно проблема retainCount.Почти в 99% случаев окончательное решение состоит не в том, чтобы просто сохранить его, а в том, чтобы найти код, который ошибочно его выпускает.

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