iOS - 如何使用委托在文本字段中打印值

时间:2013-03-04 09:10:34

标签: iphone ios ipad ios6 delegates

我是iOS新手。我有一些问题,你有一些解决方案吗?我无法在textfield中打印json值 这是我的contactViewController.m文件:

  - (void)viewDidLoad
    {
        [super viewDidLoad]; 
        // Do any additional setup after loading the view, typically from a nib.

        fname.text=@"Hello";
    }

加载视图后 hello 值显示在文本框中,但是当我调用list按钮获取json值时:

-(IBAction)list:(id)sender{
    vedant=[[WebserviceViewController alloc]init];

    [vedant listContacts];

}

然后从webserviceViewController.m我将jsonResponse传递给同一个文件,即contactViewController.m并解析json值并打印它,但它没有显示文本字段中的值

-(void)allContacts:(NSString *)JSONResponse{
    NSLog(@"%@",JSONResponse);


    NSData *jsonData = [JSONResponse dataUsingEncoding:NSASCIIStringEncoding];
    //
    NSError *err;
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&err];
    int accCount =[json count];

    for(int i=0;i<accCount;i++){

        NSData *jsonData = [JSONResponse dataUsingEncoding:NSASCIIStringEncoding];
        //

        //   NSLog(@"%@",JSONResponse);

        NSError *err;
        NSDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&err];

        NSString *firstName = [NSString stringWithFormat:@"%@", [[json objectAtIndex:i] objectForKey:@"first_name"]];


        NSLog(@"%@",firstName);    //this prints the actual first name in console But

        fname.text=firstName;
        NSLog(@"%@",fname.text);   //it prints "(Null)" in console
    }

}

我是否需要创建委托以传递值?

是的,然后是创建此类委托的一些文章或示例的任何帮助。

5 个答案:

答案 0 :(得分:0)

检查fname是否不是nil。如果您忘记在Interface Builder中正确连接它,fname将为nil,并且将忽略发送给它的所有邮件(如setText:)。

答案 1 :(得分:0)

请先检查您是否已将文本字段与fname变量绑定。如果是,则尝试使用以下方式分配值:

fname.text=[NSString stringWithFormat:@"%@",firstName];

试试吧。我希望这对你有用。

答案 2 :(得分:0)

将您的名字(即json的值)转换为全局值,并将该全局值分配到您的文本字段中。这很简单。如果你还有疑问而不是回复我会发布示例代码

答案 3 :(得分:0)

txtName.text =名字;要么 txtName.text = [NSString stringWithFormat:@&#34;%@&#34;,firstName];

答案 4 :(得分:0)

使用Delegate我解决了这个问题

在我的contactViewController.m文件中:

-(IBAction)list:(id)sender{
    vedant=[[WebserviceViewController alloc]init];
    vedant.delegate=self;
    [vedant listContacts];

}

webserviceViewController.h我创建了自己的代理

@protocol WebservicesDelegate <NSObject>
-(void)allContacts:(NSString *)JSONResponse;
@end

然后在webserviceViewController.m文件中从后端获取json响应之后我使用此代码将响应发送回我的contactViewController.m文件

[self.delegate allContacts:jsonResponse];

编译器返回到allContacts文件中的contactViewController.m函数,此代码相同,我现在没有更改代码,它会打印出值。

-(void)allContacts:(NSString *)JSONResponse{
NSLog(@"%@",JSONResponse);


NSData *jsonData = [JSONResponse dataUsingEncoding:NSASCIIStringEncoding];
//
NSError *err;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&err];
int accCount =[json count];

for(int i=0;i<accCount;i++){

    NSData *jsonData = [JSONResponse dataUsingEncoding:NSASCIIStringEncoding];
    //

    //   NSLog(@"%@",JSONResponse);

    NSError *err;
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&err];

    NSString *firstName = [NSString stringWithFormat:@"%@", [[json objectAtIndex:i] objectForKey:@"first_name"]];


    NSLog(@"%@",firstName);    //this prints the actual first name in console But

    fname.text=firstName;
    NSLog(@"%@",fname.text);   //it prints "(Null)" in console
}

}

我认为因为我试图从不同的视图获取数据并希望在另一个视图中显示数据是问题所在。 但是通过创建委托,解决了问题,我可以轻松地将数据从一个视图发送到另一个视图。