NSString чтение / запись в файл - PullRequest
0 голосов
/ 02 августа 2010

У меня просто проблемы с чтением и записью NSString в файл данных на iphone.

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *documentsDirectory = [paths objectAtIndex:0];
  NSString *saveFile = [documentsDirectory stringByAppendingPathComponent:@"Profiles.dat"];
  Boolean saveFileExists = [[NSFileManager defaultManager] fileExistsAtPath:saveFile];

  // NSString *saveFile = [documentsDirectory stringByAppendingPathComponent:@"Profiles.dat"];


  NSMutableData *gameData;
  NSKeyedUnarchiver *decoder;

  NSKeyedArchiver *encoder;

  //decoder  = [[NSKeyedUnarchiver alloc] initForWritingWithMutableData:gameData];

  myGameState *gameState = [myGameState sharedMySingleton];


  if(saveFileExists) {
   gameData = [NSData dataWithContentsOfFile:saveFile];
   decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:gameData];

   gameState.Profile1 = [decoder decodeObjectForKey:@"Name1"];
   gameState.Profile2 = [decoder decodeObjectForKey:@"Name2"];
   gameState.Profile3 = [decoder decodeObjectForKey:@"Name3"];
   gameState.Profile4 = [decoder decodeObjectForKey:@"Name4"];
   gameState.Profile5 = [decoder decodeObjectForKey:@"Name5"];

   gameState.curProfile = [decoder decodeObjectForKey:@"curProfile"];
   [decoder release];


  }
  else {
   gameData = [NSMutableData data];
   encoder  = [[NSKeyedArchiver alloc] initForWritingWithMutableData:gameData];
   gameState.Profile1 = @"Default1";
   gameState.Profile2 = @"Default2";
   gameState.Profile3 = @"Default3";
   gameState.Profile4 = @"Default4";
   gameState.Profile5 = @"Default5";

   [encoder encodeObject:@"Default1" forKey:@"Name1"];
   [encoder encodeObject:@"Default2" forKey:@"Name2"];
   [encoder encodeObject:@"Default3" forKey:@"Name3"];
   [encoder encodeObject:@"Default4" forKey:@"Name4"];
   [encoder encodeObject:@"Default5" forKey:@"Name5"];

   gameState.curProfile = gameState.Profile1;
   [encoder encodeObject:gameState.curProfile forKey:@"curProfile"];

   [encoder finishEncoding];
   //[gameData writeToFile:<#(NSString *)path#> atomically:<#(BOOL)useAuxiliaryFile#>
   [gameData writeToFile:saveFile atomically:YES ];
   //[gameData writeToFile:saveFile atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil];

   [encoder release];

  }

gameState.curProfile и т. Д. - все это указатели NSString.Сейчас я очень плохо знаком с Objective C и, похоже, не могу заставить это работать правильно.Я искал вокруг форумов и не могу найти правильный способ сделать это.Буквально все, что я хочу, это прочитать запись NSString в файл dat, но она не работает как есть.Мне удалось написать ints и bools без проблем, просто не могу обойти проблему с текстом самостоятельно.любая помощь ценится благодаря G

1 Ответ

1 голос
/ 02 августа 2010

Ваш код работает без проблем здесь. Я думаю, у вас есть проблемы в других частях кодов.

Кстати, если вам нужно сохранить только несколько записей, вам не нужно делать все эти работы самостоятельно; просто используйте NSUserDefaults. Он автоматически подготавливает файл для сохранения данных, кодирует данные и декодирует данные при следующем запуске. См. этот документ Apple . Может использоваться как

 [[NSUserDefaults standardUserDefaults] setString:@"boo" forKey:@"key!"];

и позже данные могут быть прочитаны как

 NSString* s=[[NSUserDefaults standardUserDefaults] stringForKey:@"key!"];

Это так просто! Вы можете позвонить

[[NSUserDefaults standardUserDefaults] synchronize];

для принудительного сохранения данных в файл; обычно в этом нет необходимости (система делает это автоматически при выходе и т. д.)

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