2011-10-23 6 views
1

Doubleの値をNSUserDefaultに保存しようとしていますが、NSITableViewを再ロードしようとしたときに、NS値が実際の値を示すように格納できましたが、そのCell値がuserdefaultの現在の値で更新されません。NSUserDefaultにObjectとして格納されたDouble値がUITableViewCellに反映されないのはなぜですか?

この奇妙な振る舞いは、このような奇妙な行動が起こるのはなぜ私がUIAlertView

のデリゲートメソッドから私の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]; 
} 

デリゲートメソッドは、以下のようになります::ユーザーのデフォルト値を設定するときは、doubleValueを使用していない

-(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]; 
     } 
    } 
} 
+0

cellForRowAtIndexPathコードも表示できますか? – zakishaheen

答えて

5
  • は、ここに私のコードです。どちらかというと、herzさんの言うとおり、setDoubleメソッドを使用します。

  • あなたは、デフォルトでsynchronizeを呼び出していませんが
  • それを更新した後、empDataを離さないでください、あなたは私がuserDefaultが別の場所に設定されていると仮定しているとしたとき、それはnilない
  • それを保持していないオブジェクトそれを使用していますか?
+0

私はempDataのalloc initを使用しているので、empDataを保持していると思います。また、私はuserDefaultsを適切に設定し、値が0でないことを確信しています。しかし、私は同期を使用しようとします... – DShah

+0

あなたは、/申し訳ありませんが、そのコードの一部を通知did notを割り当てることはできません。配列から実際のオブジェクトを取得すると、そこにメモリリークが発生します。 alloc/initやreleaseは必要ありません。 – jrturton

+0

私は同期を使ってみましたが、成功しませんでした。また、UserDefaultにDouble値をObjectとして格納したい場合は、それが可能ですか?なぜなら、私はDouble ValueをStringにして、それをユーザーのデフォルトに保存しているからです。 – DShah

6

setDouble:forKey:の方法をNSUserDefaultsに設定し、値を管理する必要があります。また、synchronizeNSUserDefaultsを後で使用するために保存します。

関連する問題