2010-02-06 4 views
1

У меня есть NSMutableArray, который я создаю при загрузке программы. Если программа завершается, я сохраняю массив в файле. Затем, когда приложение запускается снова, я проверяю, существует ли этот файл, и если да, прочитайте его как массив.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 --- Когда он не признает его равным, с помощью загрузки файла

Любое понимание на это г reatly оценили.

Geo ...

ответ

5
if (strInfo == @"DOUBLE") 
{ 
    //do something 
} 

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

if ([strInfo isEqualToString: @"DOUBLE"]) { ... } 

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

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

+0

oh duh - haha ​​Я должен был получить это. Хороший ответ +1 –

+0

То, что он работал при первой загрузке, является тонкой gotcha (теперь объясняется). Пожалуйста! – bbum

0

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

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

Смежные вопросы