2012-07-13 81 views
0

我必須在具有表格視圖的iPhone應用程序的Tabbar控制器中添加一個選項卡什麼是顯示JSON數據。表格視圖中的JSON數據iOS

我的問題是現在,我看到表視圖,但沒有數據。這裏是我的代碼:

.h文件中

#import <UIKit/UIKit.h> 

@interface FourthViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> 

    @property (strong, nonatomic) IBOutlet UITableView *myTableView; 
    @property (nonatomic, strong) NSArray *tweets; 

@end 

.m文件

#import "FourthViewController.h" 

@interface FourthViewController() 

@end 

@implementation FourthViewController 

@synthesize myTableView; 
@synthesize tweets; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Issue load request after the view has been loaded. 
    [self issueLoadRequest]; 
} 

- (void)viewDidUnload 
{ 
    [self setMyTableView:nil]; 
    [super viewDidUnload]; 
} 

- (void)issueLoadRequest 
{ 
    // Dispatch this block asynchronosly. The block gets JSON data from the specified URL and performs the proper selector when done. 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     NSData* data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://api.twitter.com/1/statuses/user_timeline.json?screen_name=jmenter&count=10"]]; 
     [self performSelectorOnMainThread:@selector(receiveData:) withObject:data waitUntilDone:YES]; 
    }); 
} 

- (void)receiveData:(NSData *)data { 
    // When we have the data, we serialize it into native cocoa objects. (The outermost element from twitter is 
    // going to be an array. I JUST KNOW THIS. Reload the tableview once we have the data. 
    self.tweets = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; 
    [self.myTableView reloadData]; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return self.tweets.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [[UITableViewCell alloc] init]; 
    // The element in the array is going to be a dictionary. I JUST KNOW THIS. The key for the tweet is "text". 
    NSDictionary *tweet = [self.tweets objectAtIndex:indexPath.row]; 
    cell.textLabel.text = [tweet objectForKey:@"text"]; 
    cell.textLabel.font = [UIFont boldSystemFontOfSize:11]; 
    cell.textLabel.numberOfLines = 3; 
    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Spit out some pretty JSON for the tweet that was tapped. Neato. 
    NSString *formattedJSON = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:[self.tweets objectAtIndex:indexPath.row] options:NSJSONWritingPrettyPrinted error:nil] encoding:NSUTF8StringEncoding]; 
    NSLog(@"tweet:\n%@", formattedJSON); 
} 


@end 

我已經使用這個嘖嘖這裏:http://jeffmenter.wordpress.com/2012/05/30/json-ios-5-go/

+0

順便說一句,當你NSLog(@「twitter:%@」,twitter)時輸出是什麼? – 2012-07-13 08:17:55

回答

0

因爲它是當前定義的鳴叫是一種NSArray的。您不應使用objectForKey訪問其成員,而應使用objectAtIndex:indexPath.row。 (在cellForRowAtIndexPath

根據您收到的數據,您可能會選擇使用NSDictionara進行推文。

0

檢查tweet中的objectforkey「text」是否爲字符串,如果不是使用[NSString Stringwithformat:@「%@」,[tweet objectForKey:@「text」]]將其轉換爲字符串;

0

您應該將該JSON數據放在表視圖之外的對象中,然後將其提取到表視圖cellForRowAtIndexPath方法中,而不是直接獲取它。 由於下載數據需要一些時間,連接不良也是一個問題。所以如果數據沒有下載,表格視圖將不顯示任何內容。因此,最好下載它並檢查它是否通過添加斷點來存在,而不是嘗試獲取它。