2010-12-05 31 views
-1

我已經將數據保存到NSUserDefaults中,但我不知道如何將其顯示到UITable中。如何顯示保存在表中的數據

-(IBAction)savehighscore_button { 

    int i, ii = -1; 

    struct high_score { 
     NSString *name; 
     int highScore; 
    }; 

    NSString *nameentered; 

    nameentered = nametextbox.text; 

    struct high_score structArray[10]; 

    NSUserDefaults *userPreferences = [NSUserDefaults standardUserDefaults]; 

    for (i=0; i<10; i++) { 

     if ([userPreferences stringForKey :[NSString stringWithFormat:@"highScoreNameEntry%d",i]] !=nil && [userPreferences stringForKey :[NSString stringWithFormat:@"highScoreEntry%d"]] !=nil) { 
      structArray[i].name= [userPreferences stringForKey:[NSString stringWithFormat:@"highScoreNameEntry%d",i]]; 
      structArray[i].highScore = [userPreferences integerForKey:[NSString stringWithFormat:@"highScoreEntry%d",i]]; 
      ii = i; 
     } 
    } 
    if (myScore >0) { 
     for (i==ii; i>=0; i--) { 
      if (myScore > structArray[i].highScore) { 
       if (i<9) 
        structArray[i+1] = structArray[i]; 
        structArray[i].name = nameentered; 
        structArray[i].highScore = myScore; 

        if (i==ii && i<9) 

         ii=i+i; 
        } 

        else if(i==ii && i<9) { 
         structArray[i+1].name = nameentered; 
         structArray[i+1].highScore = myScore; 
         ii=i+1; 
        } 
       } 
      } 

      if (ii==-1 && myScore >0) { 
       structArray[0].name = nameentered; 
       structArray[0].highScore = myScore; 
       ii=0; 
      } 
      for (i=0; i<=ii; i++) { 
       [userPreferences setObject:structArray[i].name forKey:[NSString stringWithFormat:@"highScoreNameEntry%d",i]]; 
       [userPreferences setInteger:structArray[i].highScore forKey:[NSString stringWithFormat:@"highScoreEntry%d",i]]; 

      } 

    [userPreferences synchronize]; 

    [nametextbox resignFirstResponder]; 

    [self viewDidLoad]; 
} 

回答

0

爲了使用UITableView,您需要實現UITableViewDelegate和UITableViewDatasource方法。 (或者更好地說,你的UITableView需要一個數據源和委託,例如讓你的視圖控制器實現它們)

現在,你可能想要將所有行保存在一個數組中(NSArray/NSMutableArray)並使用NSUserDefaults保存孔陣列。 由於NSArray只接受NSObjects並且沒有c結構體,爲了將你的分數放到NSArray/NSMutableArray中,你需要另外一個你自己定義的類,或者你可以使用NSDictionary。這將是你的模型。 (記住MVC?))

一旦你有了這個,那麼它很容易在UITableView中顯示得分。

這是您的structArray轉換成一個NSMutableArray

#define kScoreName @"scoreName" 
#define kHighScore = @"highScore" 
#define kDatasource = @"datasource" 


NSMutableArray *datasourceArray = [[NSMutableArray array] retain]; //this should be a instance variable 
for (i=0; i<10; i++) { 
    NSDictionary *score = [NSDictionary dictionaryWithObjectsAndKeys:structArray[i].name, kScoreName, [NSNumber numberWithInt:structArray[i].highScore], kHighScore, nil]; 
    [datasourceArray addObject:score]; 
} 

NSUserDefaults *defaults = [NSUserDefaults standardDefaults]; 
[defaults setObject:datasourceArray forKey:kDatasource]; 

的一種方法現在你只需要做[datasourceArray objectAtIndex:我],以獲得第i個元素。

有了這個數組,你只需要按照UITableView的任何一個教程,this是我的谷歌搜索中的第一個。 ;) 或者,你可以看到許多蘋果樣品

這是你將如何實現的方法之一的例子:

- (UITableViewCell *)tableView:(UITableView *)tableView 
cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle 
     reuseIdentifier:SimpleTableIdentifier] autorelease]; 
    } 

    NSUInteger row = [indexPath row]; 
    NSDictionary *score = [datasourceArray objectAtIndex:row]; 

    cell.textLabel.text = [score objectForKey:kScoreName]; 
    cell.detailTextLabel.text = [[score objectForKey:kHighScore] intValue]; 
    return cell; 

} 

@end 

希望它幫助;)

注:上面的代碼是大腦編譯;)

相關問題