2012-04-11 4 views
0

Я создаю plist, чтобы сохранить некоторые значения, однако во время тестирования я отметил, что сохраняю свой вновь созданный plist после закрытия приложения. & удален из многозадачности. Однако я теряю свои ценности внутри этого plist, если приложение удалено из многозадачности, но не если приложение закрыто ...Сохраняя plist, но теряя значения plist

Это метод данных сохранения, который у меня есть в моем классе контроллера plist, который управляет всем чтением/записью/сохранить и т.д.

- (void) saveData:(NSString *)methodName signature:(NSString *)pSignature Version:(NSNumber *)pVersion request:(NSNumber *)rNumber dataVersion:(NSNumber *)dvReturned cacheValue:(NSNumber *)cValue; 
    { 
     // get paths from root direcory 
     NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); 
     // get documents path 
     NSString *documentsPath = [paths objectAtIndex:0]; 
     // get the path to our Data/plist file 
     NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"EngineProperties.plist"]; 

     // set the variables to the values in the text fields 
     self.signature = pSignature; 
     self.version = pVersion; 
     self.request = rNumber; 
     self.dataVersion = dvReturned; 

     //do some if statment stuff here to put the cache in the right place or what have you. 
     if (methodName == @"manu") 
     { 
      self.man = cValue; 
     } 
     else if (methodName == @"models") 
     { 
      self.mod = cValue; 
     } 
     else if (methodName == @"subMod") 
     { 
      self.sub = cValue; 
     } 

     self.cacheValue = [NSDictionary dictionaryWithObjectsAndKeys: 
          man, @"Manu", 
          mod, @"Models", 
          sub, @"SubModels", nil]; 


     NSDictionary *plistDict = [NSDictionary dictionaryWithObjectsAndKeys: 
            signature, @"Signature", 
            version, @"Version", 
            request, @"Request", 
            dataVersion, @"Data Version", 
            cacheValue, @"Cache Value", nil]; 



     NSString *error = nil; 
     // create NSData from dictionary 
     NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:plistDict format:NSPropertyListXMLFormat_v1_0 errorDescription:&error]; 

     // check is plistData exists 
     if(plistData) 
     { 
      // write plistData to our Data.plist file 
      [plistData writeToFile:plistPath atomically:YES]; 

      NSString *myString = [[NSString alloc] initWithData:plistData encoding:NSUTF8StringEncoding]; 
      //  NSLog(@"%@", myString); 
     } 
     else 
     { 
      NSLog(@"Error in saveData: %@", error); 
      //  [error release]; 
     } 
    } 


    @end 

Мой вопрос состоит из двух частей .. Могу ли я сохранить значения, поэтому они сохраняются в PLIST, даже если приложение удаляется из бара multitaksing. Что мне нужно изменить, чтобы заставить это работать, если оно может работать?

+0

Возможно, это не проблема, но вы можете просто вызвать writeToFile: в своем словаре, и он будет выводиться как plist. –

+0

Вы сохраняете имя файла 'EngineProperties.plist', но ваш комментарий считает, что он сохраняет' Data.plist'. Какое имя файла вы загружаете? Кроме того, когда вы сохраняете файл, запишите 'plistPath'. Если вы запустите приложение в симуляторе, вы можете перейти на путь в поисковом устройстве и посмотреть, какие файлы были созданы, и открыть их в XCode, чтобы просмотреть их содержимое. – Dondragmer

+0

Комментарий opps был неправильным .. Я обновил его с более описательным именем. Один вопрос, однако, где путь в искателе? Я не слышал об этом раньше? –

ответ

0

Это, вероятно, связано с тем, как вызывается метод saveData. Проверьте делегат приложения, по умолчанию есть несколько заглушек. Вы, вероятно, хотите applicationWillResignActive, applicationDidEnterBackground или applicationWillTerminate. Проверьте документацию для каждого, тот, который вы хотите, будет зависеть от того, когда вы хотите, чтобы данные были записаны.

+0

правильно, поэтому вы думаете, что я должен вызвать этот метод, когда вызывается один из этих методов appdelegate .. есть специальный способ, который мне нужно вызвать (т. Е. Не создавать другой экземпляр) или дозу, которая не имеет значения, пока я называю этот метод. –

+0

Дело в том, что метод savedata вызывается каждый раз, когда я добавляю новое значение в plist. И при тестировании я убедился, что все значения были сохранены, и они все еще были удалены, когда приложение было удалено из нескольких задач ..... , –

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