NSMutableArray Строки, изменяющиеся после чтения из файла - PullRequest
1 голос
/ 07 февраля 2010

У меня есть NSMutableArray, который я создаю при загрузке программы. Если программа завершается, я сохраняю массив в файл. Затем, когда приложение запускается снова, я проверяю, существует ли этот файл, и если да, считываю его как массив.

Проблема в том, что при первом создании все нормально, я проверяю объект массива по определенной строке и, если она равна, что-то делаю. Это отлично работает на первом ходу. Но если я прочитаю массив обратно из штрафа и проведу одинаковое сравнение, хотя они оба говорят, что они одинаковы, он так не считает и пропускает процесс. Пример кода:

Это если файл не существует, создать с нуля:

NSMutableArray *tmpArray=[[NSMutableArray alloc] initWithObjects:
                          @"1000",
                          @"1000",
                          @"1000",
                          @"500",
                          @"500",
                          @"500",
                          @"250",
                          @"250",
                          @"250",
                          @"100",
                          @"100",
                          @"100",
                          @"100",
                          @"TRIPLE",
                          @"TRIPLE",
                          @"DOUBLE",
                          @"DOUBLE",
                          @"- 500",
                          @"- 250",
                          @" - 250",
                          @"- 100",
                          @"- 100",
                          @"HALF",
                          @"BUST",
                          nil];

если файл существует:

pnames = [[NSMutableArray alloc] initWithContentsOfFile:myPath];

Вот где начинается сравнение:

  NSString *strInfo;

strInfo = [pnames objectAtIndex: theInteger - 1];
NSLog(@"strInfo:  %@", strInfo);
if (strInfo == @"DOUBLE")
{
  //do something
}

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

Запись файла осуществляется через:

(void)applicationWillTerminate:(UIApplication *)application {
[pnames writeToFile:[self saveFilePath] atomically:YES];

}

Когда я смотрю в отладчике на strInfo (сверху), он выглядит как:

NSCFString - 0c8168 - DOUBLE --- От создания и распознает его как равное

NSCFString - 0x3d42af0 - DOUBLE --- Когда он не распознает его как равный, через загрузку файла

Любое понимание этого очень ценится.

Geo ...

Ответы [ 2 ]

5 голосов
/ 07 февраля 2010
if (strInfo == @"DOUBLE")
{
  //do something
}

Вы не можете сравнивать экземпляры NSString, используя ==, вам нужно использовать -isEqualToString:.

if ([strInfo isEqualToString: @"DOUBLE"]) { ... }
<Ч />

Это срабатывает при первом создании, потому что все строковые значения компилируются в ваше приложение как константы и, таким образом, @ "DOUBLE", который находится в вашем массиве, просто находится по тому же адресу, что и @ «ДВОЙНОЙ» сравнения.

Когда массив читается с «диска», выделяются новые строки.

0 голосов
/ 07 февраля 2010

Интересно, если бы вы просто сохранили эту NSString в NSUserDefaults, вам было бы намного легче. Имейте в виду, что когда вы сохраняете изменчивую строку в NSUserDefaults, когда вы ее извлекаете, она не изменяемая.

Я не уверен в вашей точной проблеме, но это может упростить ситуацию.

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