将我的 JSON 放入 tableView

Posted

技术标签:

【中文标题】将我的 JSON 放入 tableView【英文标题】:Putting my JSON into a tableView 【发布时间】:2012-03-12 17:27:29 【问题描述】:

我目前正在尝试做的是获取我的 json 信息(twitter 用户时间线)并将其粘贴到表中,关于它的所有内容 json 都可以工作,但是在将信息添加到 tableView 时它不会做关于它的任何事情,这是我的代码:

#import "FirstViewController.h"
#import <Twitter/Twitter.h>
#import <Accounts/Accounts.h>

@interface FirstViewController ()
- (void)fetchData;
@end

@implementation FirstViewController
@synthesize timelineTwiter = _timelineTwiter;


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
        self.title = NSLocalizedString(@"First", @"First");
        self.tabBarItem.image = [UIImage imageNamed:@"first"];
    
    return self;


-(void)fetchData 
    ACAccountStore *store = [[ACAccountStore alloc] init];
    ACAccountType *twitterAccountType = 
    [store accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
    [store requestAccessToAccountsWithType:twitterAccountType 
                     withCompletionHandler:^(BOOL granted, NSError *error) 
                         if (!granted) 
                             NSLog(@"User rejected access to his account.");
                          
                         else 
                             NSArray *twitterAccounts = 
                             [store accountsWithAccountType:twitterAccountType];

                             if ([twitterAccounts count] > 0) 
                                 ACAccount *account = [twitterAccounts objectAtIndex:0];

                                 NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
                                 [params setObject:@"1" forKey:@"include_entities"];

                                 NSURL *url = 
                                 [NSURL 
                                  URLWithString:@"http://api.twitter.com/1/statuses/home_timeline.json"];

                                 TWRequest *request = 
                                 [[TWRequest alloc] initWithURL:url 
                                                     parameters:params 
                                                  requestMethod:TWRequestMethodGET];

                                 [request setAccount:account];

                                 [request performRequestWithHandler:
                                  ^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) 
                                      if (!responseData) 
                                          NSLog(@"%@", error);
                                       
                                      else 
                                          NSError *jsonError;
                                          NSArray *timeline = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:&jsonError];
                                          self.timelineTwiter = timeline;
                                          if (timeline)                           
                                              NSDictionary* tweets0 = [timeline objectAtIndex:0];
                                              NSLog(@"%@", [tweets0 objectForKey:@"text"]);
                                              NSLog(@"%@", [[tweets0 objectForKey:@"user"] objectForKey:@"screen_name"]);
                                              NSDictionary* tweets1 = [timeline objectAtIndex:1];
                                              NSLog(@"%@", [tweets1 objectForKey:@"text"]);
                                              NSLog(@"%@", [[tweets1 objectForKey:@"user"] objectForKey:@"screen_name"]);
                                              NSDictionary* tweets2 = [timeline objectAtIndex:2];
                                              NSLog(@"%@", [tweets2 objectForKey:@"text"]);
                                              NSLog(@"%@", [[tweets2 objectForKey:@"user"] objectForKey:@"screen_name"]);


                                           
                                          else  
                                              NSLog(@"%@", jsonError);
                                          
                                      
                                  ];

                              
                           
                     ];



-(IBAction)refreshTimeline:(id)sender 
    [self fetchData];



#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView


    // Return the number of sections.
    return 0;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    return [self.timelineTwiter count];


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    

    id userTimeline = [self.timelineTwiter objectAtIndex:[indexPath row]];
    cell.textLabel.text = [userTimeline objectForKey:@"text"];
    cell.detailTextLabel.text = [userTimeline valueForKeyPath:@"user.name"];


    return cell;



#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath




- (void)viewDidLoad

    [super viewDidLoad];
    [self fetchData];
    // Do any additional setup after loading the view, typically from a nib.


- (void)viewWillAppear:(BOOL)animated

    [self fetchData];
    [super viewWillAppear:animated];


- (void)viewDidUnload

    [super viewDidUnload];
    // Release any retained subviews of the main view.


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);


@end

但它从不将数据加载到表格视图中,有什么帮助吗?

旁注:

我将它与界面生成器一起使用。

& 理想情况下,我想制作一个自定义单元格,这样我就可以计算出每个单元格的布局,所以如果您知道任何可以展示如何做到这一点的好网站,那也是一个大手笔。

【问题讨论】:

您是否故意在timelineTwiter 中遗漏了一个“t”? 不,我是个白痴,只是注意到了 【参考方案1】:

您必须至少将一个部分返回到表格中。现在你返回零部分。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView


    // Return the number of sections.
    return 0;


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    return 1;

【讨论】:

你的权利,我没看到,但仍然没有出现奇怪的东西【参考方案2】:

您在fetchData 实施结束时错过了reloadData

【讨论】:

我尝试添加“[self.tableView reloadData];”但是因为 tableView 在视图控制器内部,所以它不接受 tableView 的任何帮助,除了你的位置 [(UITableView *)self.view reloadData];

以上是关于将我的 JSON 放入 tableView的主要内容,如果未能解决你的问题,请参考以下文章

将我的 JSON 插入到集合中时,MongoDB 会覆盖我的自定义 id 属性吗?

我想在 html 中将数据显示为 json

将我的 HTML 放入电子邮件 [关闭]

当我将我的 laravel 项目放入 xampp 时,我的登录不起作用

如何将我的应用程序放入 iPhone 3G?

如何将我的夜间 Haskell 包放入 Stackage LTS?