1

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

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

        fname.text=@"Hello";
    }

视图加载后hello值显示在文本框中,但是当我调用列表按钮获取 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
    }

}

我需要创建委托来传递价值吗?

是的,那么创建这样的代表一些文章或示例的任何帮助。

4

5 回答 5

0

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

于 2013-03-04T09:17:53.447 回答
0

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

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

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

于 2013-03-04T09:19:42.573 回答
0

将您的名字(即来自 json 的值)获取到全局值并将该全局值分配给您的 textfield 。就是这么简单。如果您仍然有疑问而不是回复,我将发布示例代码

于 2013-03-04T10:10:31.780 回答
0

txtName.text=名字;或 txtName.text=[NSString stringWithFormat:@"%@",firstName];

于 2013-03-18T05:35:30.737 回答
0

使用代表我解决了这个问题

在我的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

然后在从后端获取 json 响应后的文件中,我使用此代码webserviceViewController.m将响应发送回我的文件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
}

}

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

于 2013-03-23T07:11:26.290 回答