Прошла тяжелая неделя, постараюсь сделать это как можно яснее.Спасибо, что уделили время на чтение.
Привет, я отправляю запрос на регистрацию на сервер.Пользовательский объект в 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