2012-05-05 64 views
2

我想通过NSUserDefaults保存我的数据并在表格视图中查看它。我已经将四个文本数据设置为数组(dataArray),以便我可以在表视图中查看它。但我无法将数据加载到表视图。所以我错过了什么?保存NSUserDefault数据并在表格视图中显示

在此先感谢。

-(IBAction)save{ 

NSUserDefaults *add1 = [NSUserDefaults standardUserDefaults]; 
[add1 setObject:txt1 forKey:@"txt1"]; 
[add1 setObject:txt2 forKey:@"txt2"]; 
[add1 setObject:txt3 forKey:@"txt3"]; 
[add1 setObject:txt4 forKey:@"txt4"]; 

[add1 synchronize]; 
} 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
self.dataArray = [NSArray arrayWithObjects:[prefs objectForKey:@"txt1"], [prefs objectForKey:@"txt2"], [prefs objectForKey:@"txt3"],[prefs objectForKey:@"txt4"] nil]; 
} 


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

// Set up the number of rows 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [dataArray count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *string = [dataArray objectAtIndex:indexPath.row]; 
    static NSString *CellIdentifier = @"Cell"; 

    UITableView *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
} 
+1

你为什么要抓住[NSUserDefaults的standardUserDefaults] 4连胜倍? – 2012-05-05 09:53:58

+0

@ H2CO3谢谢你发布......我有四个文本字段,我想我需要为每个字段调用[NSUserDefaults standardUserDefaults] 4次。如果我错了,请纠正我,我对Xcode很新。 –

+0

@LaiKalkatawi你可以使用'add1',然后设置它上面的每个对象,但是你需要同步userdefault来应用更改......请参阅下面的答案。 – Mat

回答

1

你必须调用[yourUserDefaultObject synchronize];保存NSUserDefaults的状态,但你并不真的需要创建的NSUserDefaults的对象4,你可以创建它一次,然后在相同的实例调用setObject:forKey:和然后synchronize
然后,只需设置cell.textLabel.text=string;即可在cellForRowAtIndexPath回调中设置单元格的标签。

+0

我应该在哪里调用[yourUserDefaultObject synchronize]; ?此外,我已将“NSUserDefault”降为一个。谢谢Mat –

+0

你必须在设置对象之后调用它,所以紧跟在最后一个'setObject:forKey:'之后。 – Mat

+0

我编辑了我的代码,我希望我做对了。 –

1

首先syncronize NSUserDefaults的和

您需要的Alloc的tableviewcell并指定文本的文本标签

添加下面的代码在你的cellForRowAtIndexPath方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *string = [dataArray objectAtIndex:indexPath.row]; 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if(cell==nil) 
{ 
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
} 
    cell.textLabel.text=string; 

    return cell; 
} 
+0

谢谢土之栈我有UITableView的“‘ –

+0

@Bhoomi你错过了'return' statment此消息’的类型的对象没有找到proporty文本拉布勒”。 – Mat

+0

@Luai查看更新后的答案。用UITableViewCell替换UITableView – Bhoomi

0

多德添加以下行,因为你需要在单元格的某处添加测试。因此,可以在tablviewcell.上显示如果可能,请首先制作数组,而不是通过这种方式将整个数组保存在NSUserDefaults中,这样可以节省您的时间,这是编码的更好方法。

cell.textLabel.text=string; 

编辑>>>

UILabel *label; 
label = [[UILabel alloc]initWithFrame:CGRectMake(10, 10, 50, 40)]; 

label.text = string; 

//或

label.text = @"Hi I am here.."; 

label.backgroundColor = [UIColor greenColor]; 
label.textColor = [UIColor whiteColor]; 
[cell addSubview:label]; 
+0

谢谢后,我加入,我得到这个消息的代码的UITableView“proporty textLable的类型的对象未找到‘’” –

+0

看到我的编辑答案... – Nit

+0

我什么都没用拳头编辑了一个。 –

相关问题