Сохранение словаря на iPhone не работает? - PullRequest
0 голосов
/ 09 сентября 2010

Прошла тяжелая неделя, постараюсь сделать это как можно яснее.Спасибо, что уделили время на чтение.

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

Всякий раз, когда я получаюjSon для пользователя, я делаю несколько записей журнала для их SAT (Single Access Token).Первые два журнала одного маркера доступа показывают новый, сгенерированный сервером.Третий оператор журнала показывает старый SAT от предыдущего пользователя.

Из этого я могу сделать вывод, что сохранение в телефон работает неправильно.Внутри моего метода userFromDictionary я вызываю saveUserToPhone.Логика здесь в том, что новый сервер предоставляется от jSon сервера, поэтому мы должны сохранить этот новый словарь на телефоне для будущей загрузки пользователя.

User loading/saving logic:
        self.user = [User userFromDictionary:userProperties];   
    NSLog(@"RegistrationScreenOne: User SAT: %@",self.user.singleAccessToken);
    [User saveUserToPhone:userProperties];
    NSLog(@"RegistrationScreenOne: User SAT: %@",self.user.singleAccessToken);      
    self.user = [User userFromPhone];
    NSLog(@"RegistrationScreenOne: User SAT: %@",self.user.singleAccessToken);

- первые 2 журналапоказать новый SAT, третий журнал показывает старый.

Все это внутри симулятора.Я выключаю iPhone Simulator и перезапускаюсь из Xcode при каждом запуске.

Файл реализации пользователя:

+(NSDictionary *)jSonMapping{
return [NSDictionary dictionaryWithObjectsAndKeys:
        @"username", @"username",
        @"password", @"password",
   ////
   ////ETC, spared for length
   ////     
 }

+(NSString *)userFilePath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return [documentsDirectory stringByAppendingPathComponent:kFilestats];
}

   ////
   ////kFileStats is declared in the header as @"user-file.plist"
   ////


+(User*)userFromDictionary:(NSDictionary *)dictionary{

NSDictionary *mapping = [self jSonMapping];

User *user = [[User alloc] init];

for (NSString *attribute in [mapping allKeys]){
    NSString *classProperty = [mapping objectForKey:attribute];
    NSString *attributeValue = [dictionary objectForKey:attribute];
    [user setValue:attributeValue forKeyPath:classProperty];
    NSLog(@"Class Property: %@ Value: %@",classProperty,attributeValue);
}   

[self saveUserToPhone:dictionary];

return [user autorelease];
}

+(BOOL)doesUserExistOnPhone{
NSString *dataPath = [self userFilePath];
if ([[NSFileManager defaultManager] fileExistsAtPath:dataPath]){
    return YES;
}

return NO;
}

+(User*)userFromPhone{
User *user = [[User alloc] init];

NSString *dataPath = [self userFilePath];
if ([[NSFileManager defaultManager] fileExistsAtPath:dataPath]){

    NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:dataPath];      
    user = [self userFromDictionary:dictionary];
}

return user;
}

+(void)saveUserToPhone:(NSDictionary *)dictionary{
[dictionary writeToFile:[self userFilePath] atomically:YES];    
 }

Записать выходные данные из этих 3 операторов журнала, включая переход по свойствам:

First my new user, I used random number strings for their data:
2010-09-08 14:29:05.274 AppNameWindowedApp[6873:207] Class Property: lastName Value: 2309320923
2010-09-08 14:29:05.274 AppNameWindowedApp[6873:207] Class Property: firstName Value: 309209239032
2010-09-08 14:29:05.275 AppNameWindowedApp[6873:207] Class Property: schoolName Value: ##################
2010-09-08 14:29:05.275 AppNameWindowedApp[6873:207] Class Property: mobile Value: 23902390
2010-09-08 14:29:05.276 AppNameWindowedApp[6873:207] Class Property: singleAccessToken Value: xUd3-OfcUrEaHf3FIKdl
2010-09-08 14:29:05.277 AppNameWindowedApp[6873:207] Class Property: password Value: (null)
2010-09-08 14:29:05.278 AppNameWindowedApp[6873:207] Class Property: email Value: 209239023@arst.com
2010-09-08 14:29:05.278 AppNameWindowedApp[6873:207] Class Property: schoolID Value: 4c871745a1e7490b4d000008
2010-09-08 14:29:05.279 AppNameWindowedApp[6873:207] Class Property: role Value: admin
2010-09-08 14:29:05.279 AppNameWindowedApp[6873:207] Class Property: username Value: 23903902

Токен единого доступа после установки пользователя из словаря jSon:

2010-09-08 14: 29: 05.280 AppNameWindowedApp [6873: 207] RegistrationScreenOne: SAT пользователя: xUd3-OfcUrEaHf3FIKdl

Второй оператор Log для токена единого доступа после сохранения:

2010-09-08 14: 29: 05.280 AppNameWindowedApp [6873: 207] RegistrationScreenOne: SAT пользователя: xUd3-OfcUrEaHf3FIKdl

Свойства пользовательского класса при чтении с телефона:

2010-09-08 14:29:05.281 AppNameWindowedApp[6873:207] Class Property: lastName Value: Admin
2010-09-08 14:29:05.282 AppNameWindowedApp[6873:207] Class Property: firstName Value: Admin
2010-09-08 14:29:05.282 AppNameWindowedApp[6873:207] Class Property: schoolName Value: #############
2010-09-08 14:29:05.283 AppNameWindowedApp[6873:207] Class Property: mobile Value: 
2010-09-08 14:29:05.283 AppNameWindowedApp[6873:207] Class Property: singleAccessToken Value: RL01Mv1-yJacB_FAxHG1
2010-09-08 14:29:05.283 AppNameWindowedApp[6873:207] Class Property: password Value: (null)
2010-09-08 14:29:05.284 AppNameWindowedApp[6873:207] Class Property: email Value: admin@admin.com
2010-09-08 14:29:05.286 AppNameWindowedApp[6873:207] Class Property: schoolID Value: 4c86f53ff7c9ff494f000001
2010-09-08 14:29:05.286 AppNameWindowedApp[6873:207] Class Property: role Value: AppName
2010-09-08 14:29:05.286 AppNameWindowedApp[6873:207] Class Property: username Value: admin

Токен единого доступа после чтения UserFromPhone:

2010-09-08 14: 29: 05.287 AppNameWindowedApp [6873: 207]RegistrationScreenOne: SAT пользователя: RL01Mv1-yJacB_FAxHG1

1 Ответ

0 голосов
/ 09 сентября 2010

Возможно, файл не перезаписывается, что объясняет, почему вы получаете старую запись.

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