2012-01-12 3 views
0

Я хочу проверить, использует ли пользователь последнюю версию приложения. Если это так, я должен покрасить фон некоторых ячеек.Как проверить последнюю версию приложения с NSUserDefaults

Это код, я использую:

appDelegate.m

NSString *lastVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"lastVer"]; 

метод, где я хочу, чтобы проверить:

NSString *lastVersion = (NSString *) [[NSUserDefaults standardUserDefaults] objectForKey:@"lastVer"]; 
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 
lastVersion = @"1.3.4"; 
if(![lastVersion isEqualToString:version]){ 
    cell.backgroundColor = [UIColor yellowColor]; ; 
    cell.imageView.image = [UIImage imageNamed:@"image.png"]; 

    } 
    else { 
     cell.imageView.image = nil; 
     cell.backgroundColor = [UIColor whiteColor]; 
    } 
} 

я делаю это правильно? Проверяет ли мой код последнюю версию или? Как я могу имитировать это поведение в симуляторе \ на устройстве?

Что я хочу сделать, это проверить, использует ли пользователь последнюю версию приложения, чтобы вызвать другой ключ NSUserDefaults, чтобы показать ячейки моего TableView с другим цветом фона.

EDIT

код, я использую, чтобы изменить цвет фона ячеек, если пользователь использует последнюю версию своего приложения, и если пользователь использовал приложение менее чем в три раза:

NSString *cellValue = cell.textLabel.text; 
    NSNumber *runNumber = (NSNumber *)[[NSUserDefaults standardUserDefaults] objectForKey:@"runNum"]; 
    NSString *lastVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"lastVer"]; 
    NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 

    if (!runNumber) { 
       runNumber = [NSNumber numberWithInt:0]; 
       [[NSUserDefaults standardUserDefaults] setObject:runNumber forKey:@"runNum"]; 
       [[NSUserDefaults standardUserDefaults] synchronize]; 
      } 

    if([lastVersion isEqualToString:version]){ //check if the user is using the latest version 
     if ([runNumber intValue] < 4) { //check if user has used the app less than 3 times 
      if ([cellValue isEqual: "someText"]){ 
       cell.backgroundColor = [UIColor yellowColor]; ; 
       cell.imageView.image = [UIImage imageNamed:@"image.png"]; 
       } 
      else { 
      cell.imageView.image = nil; 
      cell.backgroundColor = [UIColor whiteColor]; 
      } 
     } 
     else { 
      cell.imageView.image = nil; 
      cell.backgroundColor = [UIColor whiteColor]; 
     } 
} 
} 

ответ

4

этот код ничего не установлен ..

NSString *lastVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"lastVer"]; 
lastVersion = @"1.3.4"; 

вам нужен сеттер:

[[NSUserDefaults standardUserDefaults] setObject: @"1.3.4" forKey:@"lastVer"];//in memory 
[[NSUserDefaults standardUserDefaults] synchronize];//to disk 

и геттер:

NSString *lastVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"lastVer"]; 

редактировать:

помнить, что lastVersion является указателем, и вы просто установите его в точку где-то еще, что не ставит его в stdUserDefaults и Безразлично Синхронизируйте его с диском.

+0

И от этого я буду иметь возможность сравнить версии, не так ли? Я получаю сообщение об ошибке с помощью вашего кода: «Семантическая проблема: инициализация« NSString * »с выражением несовместимого типа« void ». Как вы можете видеть выше, я исправляю свой код, и я получаю эту работу, назначая lastVersion номер последней версии. – Phillip

+0

уверен. Я не знаю достаточно о том, что вы делаете, но вы можете точно сравнить строки, содержащие числа. –

+0

Я уверен, что вы используете гибрид своего кода и моего, я исправил мой, чтобы быть более ясным. –

1

Несомненно, если вы хотите проверить, использует ли пользователь последнюю версию приложения, которую вам нужно будет проверить с помощью внешнего ресурса.

например.

  1. Простой HTTP-запрос на ваш собственный сервер, который возвращает вашу последнюю версию приложения.

  2. Затем сравните это с текущей версией [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];

  3. магазин результат этого теста в NSUserDefaults