2013-05-13 49 views
1

我已經經歷了很多鏈接,幸運的是我有很多類似的鏈接,但沒有任何結果。- [__ NSCFDictionary objectAtIndex:]:無法識別的選擇器發送到實例0x8943940,同時解析JSON頁面到UITableView

我的陣列出現這樣在輸出,使用的NSLog()..

products =  (
      { 
     cid = 1; 
     name = "hello world"; 
    }, 
      { 
     cid = 2; 
     name = "It is an array"; 
    }, 
      { 
     cid = 3; 
     name = "error error"; 
    }, 
      { 
     cid = 4; 
     name = "OMG! still same"; 
    }, 
      { 
     cid = 5; 
     name = "any help"; 

    ... 
    ... 
    }, 
      { 
     cid = 130; 
     name = "How is the work going on."; 
    }, 
      { 
     cid = 131; 
     name = "Had a nice lunch"; 
    } 
); 
success = 1 

代碼來解析JSON,其中 「消息」 是一個數組變種..

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    [UIApplication sharedApplication].networkActivityIndicatorVisible=NO; 
    news = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; 
    NSLog(@"Feeds...%@",news); 
    [myTableView reloadData]; 
} 

代碼以顯示錶格行,這裏在「新聞」值正在顯示NSLog(); NSDictionary出現錯誤。

-(UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    NSLog(@"=====%@====",news); 
    NSDictionary *myDict = [news objectAtIndex:indexPath.row]; 
    NSArray *myArray = [myDict objectForKey:@"name"]; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MainCell"]; 
    if (cell==nil) { 
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MainCell"]; 
} 

for (NSString *str in myArray) { 
    cell.textLabel.text = str; 
} 
    return cell; 

}

我無法找到我丟失在這裏..,請幫助我。

預先感謝您。

+0

其實錯誤告訴「新聞」是一個字典,而不是你寫的數組。你能仔細檢查一下這個聲明嗎? – Rabiees 2013-05-13 12:17:24

+0

它是字典,我意識到當我通過@Midhun MP的答案時。但它只在表格視圖中顯示兩次(第一個)名稱。 – mavericks 2013-05-13 14:10:30

回答

1

newsNSDictionary,和字典沒有一個方法objectAtIndex:
你必須使用,而不是[news objectForKey:...];

+0

NSLog(@「=====%@ ====」,news); NSArray * myArray = [news objectForKey:@「name」]; NSLog(@「myarray is%@」,myArray); myarray是(null)here和TableView是空的 – mavericks 2013-05-13 12:22:48

+0

你的JSON字符串被解析成你的「新聞」字典。當你想獲得這個字典中某個鍵的對象時,你當然要使用在那裏定義的鍵。由於我們不知道「數據」中的內容,因此請在其中查找其中定義的鍵的來源,然後使用其中的一個而不是「名稱」。顯然,「名稱」不是現有的密鑰。 – 2013-05-13 12:38:58

6

你的JSON結構是這樣的:

詞典 - >陣列 - >對象(字典)。

所以,你需要做的:

  1. 使用該密鑰product
  2. 使用index
  3. 從字典中獲取的名稱摘自數組的對象(字典)提取從字典中的數組使用密鑰name

代替該目的:

NSDictionary *myDict = [news objectAtIndex:indexPath.row]; 
NSArray *myArray = [myDict objectForKey:@"name"]; 

用途:

NSArray *myArr = [news objectForKey:@"products"]; 
cell.textLabel.text = [[myArr objectAtIndex:0] objectForKey:@"name"]; 

編輯

也能改變你numberOfRowsInSection這樣的:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [[news objectForKey:@"products"] count]; 
} 
+0

什麼是您的代碼中的「myDict」..NSArray * myArr = [news objectForKey:@「products」]; NSDictionary * myDict = [myArr objectAtIndex:indexPath.row]; cell.textLabel.text = [[myDict objectAtIndex:0] objectForKey:@「name」]; ...這就是你說的正確的.. – mavericks 2013-05-13 12:59:37

+0

@pingToThree :這是一個錯字,請檢查編輯 – 2013-05-13 13:20:46

+0

它顯示的第一個值(因爲索引(0)),兩次,就是這樣...而我也做了一些修改,這並不順利..NSArray * myArr = [news objectForKey:@「products」]; NSLog(@「#### myArr is%@ ####」,myArr); for(id i in myArr){ nameArr = [[myArr objectAtIndex:indexPath.row] objectForKey:@「name」];對於(NSString * str in nameArr){ } \t cell.textLabel.text = str; \t} ...這是拋出一個錯誤 - [__ NSCFString countByEnumeratingWithState:objects:count:]:無法識別的選擇發送到實例0x716f070 – mavericks 2013-05-13 14:01:12

0

將在NSDictionary的數組,然後用它表方法

NSMutableArray *result=[[NSMutableArray alloc] init]; 
    result = [googleResponse valueForKey: @"products"]; 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
NSMutableDictionary *dt = [result objectAtIndex:indexPath.row]; 

} 

它會幫助你!!!!!

1
[news objectAtIndex:indexPath.row]; 

NSMutableDictionary是indexpath。行,所以添加第一個新聞陣列和該陣列名稱添加在 您的代碼,你什麼也得不到

相關問題