我已将数据保存到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 :(得分: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]来获取第i个元素。
拥有这个数组你只需要关注UITableView上的任何教程,this是我谷歌搜索中的第一个。 ;) 或者您可以看到许多Apple样本
这是如何实现其中一种方法的示例:
- (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
希望它有所帮助;)
注意:上面的代码是脑编译的;)