0

我喜欢在 UITableView 中显示时间线,我正在使用此代码来获取推文:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self gettweets];


}

-(void)gettweets {


    NSString *apiurl = [NSString stringWithFormat:@"http://api.twitter.com/1/statuses/user_timeline.json?screen_name=idoodler"];

    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:apiurl]];


    NSError* error;
    NSDictionary * json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
    NSArray *meta = [json valueForKeyPath:@"text"];
    tweets = json;

    NSLog(@"%@",meta);

}

我的日志显示了正确的推文。

然后我用它在 UITableView 中显示推文:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
       //return 0;

    return [tweets count];

}

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

{

    static NSString *CellIdenfifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdenfifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdenfifier];
    }

    cell.text = [tweets objectAtIndex:indexPath.row];
    [tableView reloadData];


    return cell;

}

我在 UITableView 的 .h 文件中创建了一个 IBOutlet。我真的不知道我的错误是什么!

4

1 回答 1

3

最好做这样的事情:

NSString *apiurl = [NSString stringWithFormat:@"http://api.twitter.com/1/statuses/user_timeline.json?screen_name=idoodler"];
NSError* error = nil;
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:apiurl] options: NSDataReadingUncached error:&error];
if (error)
{
   // Something went wrong
}
else {
  // Data fetched!
  NSDictionary * json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
  NSArray *meta = [json valueForKeyPath:@"text"];
  // Setup your tweets array here!
  [tableview reloadData];
}

同时删除 [tableview reloadData]; 来自 cellForRowAtIndexPath 方法。

编辑:也不要忘记在界面构建器或 viewDidLoad 方法中将您的 ViewController 设置为 tableview 的数据源/委托,如下所示:

[tableView setDelegate:self];
[tableView setDataSource:self];
于 2013-04-29T15:31:44.973 回答