通过objective-c中的json为对象赋值

时间:2015-09-01 14:14:19

标签: ios objective-c json

我是目标c的新手,只是试图为现有对象增加价值。

请查看下面的代码。

当我创建像这样的对象时它工作正常

 ToAddiTem *item1 = [[ToAddiTem alloc] init];
 item1.itemName = @"Some value";
 [self.toDoItems addObject:item1];

 ToAddiTem *item2 = [[ToAddiTem alloc] init];
 item2.itemName = @"Some value";
 [self.toDoItems addObject:item2];

 ToAddiTem *item3 = [[ToAddiTem alloc] init];
 item3.itemName = @"Some value";
 [self.toDoItems addObject:item3];

但是当我试图用json webservices动态地执行此操作时,它根本不起作用。

请看下面的内容。

NSURL *url = [NSURL URLWithString:@"http://acumen- locdef.elasticbeanstalk.com/service/countries"];


NSURLRequest *request = [NSURLRequest requestWithURL:url];


[NSURLConnection sendAsynchronousRequest:request
                                   queue:[NSOperationQueue mainQueue]
                       completionHandler:^(NSURLResponse *response,
                                           NSData *data, NSError *connectionError)
 {
     if (data.length > 0 && connectionError == nil)
     {
         NSMutableArray *greeting = [NSJSONSerialization JSONObjectWithData:data
                                                             options:0
                                                               error:NULL];

         for (NSDictionary *countryList in greeting) {

            ToAddiTem *item1 = [[ToAddiTem alloc] init];
            item1.itemName = countryList[@"name"];
            [self.toDoItems addObject:item1];

         }


     }
 }];

非常感谢你的帮助!!

3 个答案:

答案 0 :(得分:0)

您可能需要初始化toDoItems Array

self.toDoItems = [NSMutableArray array];

然后

for (NSDictionary *countryList in greeting) {

        ToAddiTem *item1 = [[ToAddiTem alloc] init];
        item1.itemName = countryList[@"name"];
        [self.toDoItems addObject:item1];

     }

答案 1 :(得分:0)

您可能会收到反序列化错误。

 NSError *err;
 NSMutableArray *greeting = [NSJSONSerialization JSONObjectWithData:data
                                                         options:0
                                                           error:NULL];

 if (err)
 {
     NSLog(@"Error deserializing JSON: %@", [err localizedDescription]);
 }
 else
 {
     for (NSDictionary *countryList in greeting) {

        ToAddiTem *item1 = [[ToAddiTem alloc] init];
        item1.itemName = countryList[@"name"];
        [self.toDoItems addObject:item1];

     }
 }

答案 2 :(得分:0)

我遇到了同样的问题,发现这是因为您异步获取数据。因此,您的代码不会等到数据存在,它才会继续。

如果您将其切换为同步通话,它将起作用:

NSURL *url = [NSURL URLWithString:@"http://acumen-locdef.elasticbeanstalk.com/service/countries"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSError *error = nil;
NSHTTPURLResponse *responseCode = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&responseCode error:&error];
NSMutableArray *greeting = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];

for (NSDictionary *countryList in greeting) {
    ToAddiTem *item1 = [[ToAddiTem alloc] init];
    item1.itemName = countryList[@"name"];
    [self.toDoItems addObject:item1];
}