ObjC:从Editing-View返回时更新*标签

时间:2011-12-10 19:06:40

标签: objective-c

抱歉我的英语不好,如果你不了解我,请问! :) 我有Objective-C的问题。 我试着尽可能简单地解释我的问题:

我在'profile.m'中创建了两个接口'profile'和'editProfile'。 我想在配置文件中有一个表(或者开头是*标签),然后我可以点击'edit'并在TextField中填入一个字符串。使用“保存”按钮,我将此字符串保存在数据库(或外部变量)中。那当然没问题.. 现在我的问题:点击'保存'我想回到'个人资料'页面,我的代码:

[self.navigationController popViewControllerAnimated:YES];

但我希望更新IBOutlet UILabel *标签(或表格)。此*标签应显示我在“editprofile”中输入TextField的文本。 但它没有更新!我的代码“个人资料”的一部分:

@implementation Profil
@synthesize label;
// ....
-(void) method{
 Database* db = [[Database alloc] init];
 if([db getadresse]!=nil){
    NSString *s=[db getadresse];
    label.text=s;
    [data addObject:s];
    [datadetail addObject:@"Adresse"];}
//...

和'editprofil':

-(IBAction)save:(id)sender{
 Database* db = [[Database alloc] init];
 [db setadresse:TextField.text]; 
 [self.navigationController popViewControllerAnimated:YES];
 Profile* p= [[Profile alloc] init]; 
 [p method];}

我可以做些什么来立即更新*标签?

谢谢!


那么'个人资料'中的表怎么样?我想让它焕然一新。 我在'ViewWillApear'中添加了以下几行:

data = [[NSMutableArray alloc] init];   //NSMutableArrays
datadetail = [[NSMutableArray alloc] init];

database* db = [[database alloc] init];

if([db getadresse]!=nil){
    NSString *s=[db getadresse];
    [data addObject:s];
    [datadetail addObject:@"Adresse"];}


if([data count]>0){   

UITableView *table = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen]  applicationFrame]
                                                      style:UITableViewStylePlain];
table.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
table.delegate = self;
table.dataSource = self;
[table reloadData];

self.view = table;

}

因此,表(在ViewWillAppear中创建)应该显示数组的一个条目('[db.getadresse]')。但我得到了例外:

- [Profile tableView:numberOfRowsInSection:]:无法识别的选择器发送到实例0x688d290

NumberOfRowsInSection只是:return [data count]

你可以告诉我出了什么问题吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

当视图出现时,UIKit会将viewWillAppear:消息发送给视图控制器。您的第一个(“配置文件”)视图控制器可以在收到该消息时更新标签:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    self.label.text = code to get the text from the database;
}