将我的 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 属性吗?