2012-07-20 89 views
1

我已經成功地解析了我的應用程序中的json文件,但是當我嘗試在表格視圖中顯示它的所有內容時,它沒有顯示出來,這裏是我的代碼。UItableviewcontroller單元格文本標籤內容沒有顯示

NSString *urlstr=[NSString stringWithFormat:@"http://minora.p41techdev.net/portal.php"]; 

NSURL *url=[NSURL URLWithString:urlstr]; 

NSData *data =[NSData dataWithContentsOfURL:url]; 

NSError *error; 

NSArray *json=(NSMutableArray*) [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 

//NSLog(@"%@",json); 
NSDictionary *dict =[NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"a title", @"more data",nil] forKeys:[NSArray arrayWithObjects:@"titleKey",@"dataKey", nil]]; 


NSLog(@"1"); 

NSString *integ = [dict valueForKey:@"id"]; 
NSString *title=[dict valueForKey:@"title"]; 
NSString *category=[dict valueForKey:@"category"]; 
NSString *description=[dict valueForKey:@"description"]; 
NSString *spectitle=[dict valueForKey:@"spectitle"]; 
NSString *specvalue=[dict valueForKey:@"specvalue"]; 

NSArray *arr =[NSArray arrayWithObjects:integ,title,category,description,spectitle,specvalue, nil]; 

[tablearray addObject:arr];  
NSLog(@"%@",tablearray); 





} 

- (void)viewDidUnload 
{ 
[super viewDidUnload]; 
// Release any retained subviews of the main view. 
// e.g. self.myOutlet = nil; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

#pragma mark - Table view data source 


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
//#warning Incomplete method implementation. 
// Return the number of rows in the section. 
return [tablearray count]; 
NSLog(@"5"); 

} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 


    cell.textLabel.text=[[tablearray objectAtIndex:indexPath.row] objectAtIndex:1]; 


    return cell; 

}

和我的JSON文件看起來像這樣

[ 
{ 
    "id": "1", 
    "category": "New Category1", 
    "title": "New Product2", 
    "description": "Please type a description1", 
    "imgurl": "http://s.wordpress.org/about/images/wordpress-logo-notext-bg.png", 
    "spectitle": "Specification", 
    "specvalue": "Value" 
}, 
{ 
    "id": "2", 
    "category": "Mobile", 
    "title": "Samsung", 
    "description": "Please type a description", 
    "imgurl": "http://s.wordpress.org/about/images/wordpress-logo-notext-bg.png", 
    "spectitle": "Price", 
    "specvalue": "100$" 
} 
] 

指導,請...

我越來越線程問題像這樣

2012-07-20 19:36:03.504 tablevc[2253:f803] 1 
2012-07-20 19:36:03.505 tablevc[2253:f803] 2 
2012-07-20 19:36:03.507 tablevc[2253:f803] 4 
2012-07-20 19:36:03.507 tablevc[2253:f803] 3 
2012-07-20 19:36:03.508 tablevc[2253:f803] *** Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:], /SourceCache/UIKit_Sim/UIKit-1914.84/UITableView.m:6061 
2012-07-20 19:36:03.508 tablevc[2253:f803] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:' 
*** First throw call stack: 
(0x13d2022 0x1563cd6 0x137aa48 0x9b32cb 0xb6d28 0xb73ce 0xa2cbd 0xb16f1 0x5ad21 0x13d3e42 0x1d8a679 0x1d94579 0x1d194f7 0x1d1b3f6 0x1d1aad0 0x13a699e 0x133d640 0x13094c6 0x1308d84 0x1308c9b 0x12bb7d8 0x12bb88a 0x1c626 0x2ae2 0x2a55 0x1) 
terminate called throwing an exception 
+1

你知道'tablearray'中有正確的信息嗎? 'NSLog'你的'cellForRowAtIndexPath'方法,並確保它是1)調用和2)'tablearray'是合法的。 – Dustin 2012-07-20 13:35:58

+0

你可以打印一張表格陣列嗎? – 2012-07-20 17:24:52

+0

沒有表格陣列didnot print..can你請幫我.. – Dany 2012-07-20 17:33:35

回答

3

我沒有看到初始化在任何地方的tablearray上。

添加到您的viewDidLoad方法:

tablearray = [[NSMutableArray alloc] init]; 

我也看到你插入陣列內的陣列。這意味着,當你需要訪問正確的數據(的NSString你的情況),您必須使用正確的索引:

cell.textLabel.text=[[tablearray objectAtIndex:indexPath.row] objectAtIndex:1]; 

我用「objectAtIndex:1」,因爲標題字符串存儲在索引1中內部陣列。更好,更通用的方法是使用NSDictionary。例如:

NSDictionary *dict =[NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"a title", @"more data",nil] forKeys:[NSArray arrayWithObjects:@"titleKey",@"dataKey"]]; 

此外,請確保您的委託爲您的表返回正確數量的部分。

+0

itsin .h文件我已經聲明爲NSMutableArray * tablearray; – Dany 2012-07-20 13:33:30

+0

@property(nonatomic,retain)NSMutableArray * tablearray; – Dany 2012-07-20 13:34:00

+0

這是不夠的 – Stavash 2012-07-20 13:34:03

1

通話[tableView reloadData]你把你的表數組中的常用3後...

[tablearray addObject:arr]; 
[tableView reloadData] 
NSLog(@"2"); 

希望它有助於

+0

但我dint聲明任何tableview,因爲我已經創建了UItableViewController下的新文件...任何想法重寫代碼..? – Dany 2012-07-20 13:39:02

+0

然後嘗試[self.tableView reloadData]而不是[tableView reloadData] ... – 2012-07-20 13:48:52

+0

仍然我不能得到它...只有表單元格視圖爲空...沒有內容.. – Dany 2012-07-20 13:57:30

2

中的tableview部分的數量至少是一個......

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    { 
    //#warning Potentially incomplete method implementation. 
    // Return the number of sections. 
    return 1;//It should be at least one....... 
    } 

cellForRowAtIndexPath:方法中寫下面的代碼。否則,你會得到錯誤。

if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

我認爲這會對您有所幫助。

+0

更改爲1後我沒有得到它... – Dany 2012-07-20 13:54:41

+0

檢查一次設置委託和數據源.. – 2012-07-20 13:59:52

+0

你指向TableView ... – Dany 2012-07-20 14:03:14

1

你應該初始化細胞是這樣的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell==nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

    } 
    [[cell textLabel] setText:[tablearray objectAtIndex:indexPath.row]]; 

    // Configure the cell... 

    return cell; 
} 
+0

對不起......這不工作... – Dany 2012-07-20 16:50:02

+0

相同的問題或不同的? – 2012-07-20 17:21:29

+0

相同的問題...內容不顯示..因爲我傳遞了很多值顯示在一個單元格中。它是否會自動調整大小,或者我必須設置它.. – Dany 2012-07-20 17:34:57

1

你有1元tablarray。這個元素是一個包含幾個條目的數組。 你的數據源聲明只有一個單元格(tablearray計數,這是一個)。

您的cellForIndexPath方法將始終查找json數組中的第一個,也是唯一的第一個元素。

編輯:無關,但如果未設置json中的字段,則會返回零,並且會終止arrayWithObjects中的數組,這可能會導致超出界限的索引。 是用這種方法很小心,用它拍攝自己的腳很容易。

相關問題