Почему значение Double, сохраненное как Object в NSUserDefault, не отражается в UITableViewCell? - PullRequest
1 голос
/ 23 октября 2011

Я пытаюсь сохранить Double значение в NSUserDefault Но хотя я могу сохранить его (поскольку мое значение NSLog показывает истинное значение), когда я попытался перезагрузить UITableView, его значение ячейки не обновляется с текущим значением в пользовательской ошибке.

Это странное поведение происходит, только когда я вызываю мой setUserDefaults метод из метода делегата UIAlertView

Почему происходит такое странное поведение ??

Вот мой код:

- (void)setUserDefaults
{
    NSLog(@"setUserDefault : empArray: %d, empCount: %d",empArray.count, empCount);
    NSMutableDictionary *empData = [[NSMutableDictionary alloc] init];
    if (empArray.count>1)
        empData = [empArray objectAtIndex:(empCount-1)];   // because empCount starts from 1. and empArray[0] = empCount 1
    else
        empData = [empArray objectAtIndex:0];

    [userDefault setObject:[NSString stringWithFormat:@"%.2f",[empData objectForKey:@"salary"]] forKey:@"salary"];
    NSLog(@"setUserDefaults: salary=%.2f",[[empData objectForKey:@"salary"] doubleValue]);

    [empData release];

    [self.tblView reloadData];
}

Метод делегирования UIAlertView выглядит следующим образом:

-(void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger) buttonIndex
{
    if (alertView.tag == 1)    // btnRemoveEmpPressed. 
    {
        if(buttonIndex==0)
        {
            NSLog(@"buttonIndex 0");
        }
        else
        {
            NSLog(@"empRemovedPressed OK, buttonIndex 1, empArray Count %d, empCount %d",empArray.count, empCount);
            //        [empArray removeObjectAtIndex:(empCount)];
            empCount -= 1;
            lblTitle.text = [NSString stringWithFormat:@"Employee %d",empCount];
            [self setUserDefaults];
        }
//        [tblView reloadData];
    }
    else if (alertView.tag == 2)
    {
        if (buttonIndex==1)
        {
            [self resetUserDefaults];
            empCount = 1;
            [empArray removeAllObjects];
            lblTitle.text = [NSString stringWithFormat:@"Employee %d",empCount];
        }
    }
}

Ответы [ 2 ]

6 голосов
/ 23 октября 2011

Вы должны использовать setDouble:forKey: метод NSUserDefaults и позволить ему управлять значением для вас.Также synchronize NSUserDefaults, чтобы сохранить значение для последующего использования.

5 голосов
/ 23 октября 2011
  • Вы не используете doubleValue при настройке пользовательских настроек по умолчанию. Либо сделайте это, либо, как говорит герц, используйте метод setDouble.
  • Вы не вызываете synchronize для вашего объекта по умолчанию после его обновления
  • Не выпускайте empData, вы не сохранили его
  • Я предполагаю, что userDefault установлен в другом месте, и это не nil, когда вы его используете?
...