2012-08-10 106 views
0

有人可以帮我解决问题,我试图用NSserialization来解析Deet。我试图解析下一个JSON:解析属性NSserialization

{ 
    thing: "10", 
    Product: [ 
     { 
      @atri: { 
       Name: "Single" 
      }, 
      Price: [ 
       "21,40", 

       "27,50" 
      ] 
     }, 
     { 
      @atri: { 
       Name: "Day" 
      }, 
      Price: [ 
       "4,80", 
       "3,80", 
       "333,20", 
       "436,60", 
       "5,533553" 
      ] 
     } 
    ] 
} 

我试图解析与此代码 '价格':

Deeta *NSApiDeet = [Deeta DeetWithContentsOfURL:[NSURL URLWithString:Planner]]; 
    NSError *parseError = nil; 
    id jsonObject = [NSJSONSerialization JSONObjectWithDeet:NSApiDeet options:NSJSONReadingAllowFragments error:&parseError]; 

    NSMutableArray *DeetNS = [[NSMutableArray alloc] init]; 

    if ([jsonObject respondsToSelector:@selector(objectForKey:)]) { 
     for (NSDictionary *Deet in [jsonObject objectForKey:@"Product"]) { 
      NSDictionary *scrubbedDeet = [NSDictionary dictionaryWithObjectsAndKeys: 
              [Deet objectForKey:@"Price"], @"Price", 

              nil]; 




      [self setTableDeet:[jsonObject objectForKey:@"Product"]]; 

      [DeetNS addObject:scrubbedDeet]; 

在NSLog的我收到:

1: (
    "2,40", 
    "1,90", 
    "1,40", 
    "4,10", 
    "3,30", 
    "2,50" 
) 
2012-08-10 14:26:10.242 [19716:707] 1: (
    "4,80", 
    "3,80", 
    "2,80", 
    "8,20", 
    "6,60", 
    "5,00" 
) 

现在我试图解析表格中的每个价格我试过类似:

NSDictionary *Deet = [tableDeet objectAtIndex:[indexPath row]]; 
    cell.Price.text = [Deet objectForKey:@"Price"]; 

但它崩溃了;

-[__NSCFArray isEqualToString:]: unrecognized selector sent to instance 0x2b8fc0 
2012-08-10 14:28:40.835 Untitled[19734:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray isEqualToString:]: unrecognized selector sent to instance 0x2b8fc0' 
*** First throw call stack: 
(0x36f2a88f 0x33341259 0x36f2da9b 0x36f2c915 0x36e87650 0x350ff3f9 0xfdc89 0x3515befb 0x3515afd9 0x3515a763 0x350fef37 0x36e891fb 0x3259caa5 0x3259c6bd 0x325a0843 0x325a057f 0x325984b9 0x36efeb1b 0x36efcd57 0x36efd0b1 0x36e804a5 0x36e8036d 0x35047439 0x35129cd5 0xfa67d 0xfa618) 
terminate called throwing an exception(lldb) 
+0

对不起Frenck,真的很难理解你想要什么,我可以看到你做了什么,但是你期望的输出是什么?这个错误非常明显,当你需要一个字符串时,你有一个数组,但是你需要解释一下,基于你放在那里的json,你想要做什么,也许存在一个简单的方法来做到这一点。您也必须使用以较低骆驼大小写命名的变量。 – ggrana 2012-08-10 14:47:59

回答

0

首先,当您创建'scrubbedData'NSDictionary时,您将要添加两个键@“价格”键给它,这不是一个好主意。

除此之外,我还有点不清楚你到底在做什么。看起来你想要得到一个单一的价格数组,并将它们中的每一个输出到UITableView中的单个行。 如果是这样的话,我建议是这样的:

(离开前面的代码,因为它是) ....

NSMutableArray *dataNS = [[NSMutableArray alloc] init]; 

if ([jsonObject respondsToSelector:@selector(objectForKey:)]) 
{ 
    for (NSDictionary *dataItem in [jsonObject objectForKey:@"Product"]) 
    { 
     NSArray *priceArray = [dataItem objectForKey:@"Price"]; 
     for(NSString *individualPriceString in priceArray) 
     { 
      [dataNS addObject:individualPriceString]; 
     } 
    } 
} 

然后,在你UITableViewDataSource方法

cell.Price.text = [dataNS objectAtIndex:[indexPath row]]; 
-1

Price key引用的对象是价格数组,而不是单个价格数组。 cell.Price.text显然需要一个字符串,而不是一个数组。

+0

我该如何解决这个问题? – Frenck 2012-08-10 12:50:43

+0

创建一个函数,将Price的元素解析为一个字符串,然后将此字符串作为cell.Price.Text的值赋值 – 2012-08-10 12:56:06

+0

@Frenck您可能需要按照Lajos的说法连接价格,或者您需要选择其中一个,或者您每个价格需要一个单独的文本单元格。 – JeremyP 2012-08-10 13:03:51