使用JSON序列化从Twitter填充自定义TableViewCell

时间:2015-05-27 15:54:32

标签: objective-c uitableview nsdictionary tableview nsjsonserialization

我是Objective-C的新手。我花了无数个小时被困在得到一张空白的桌面视图,我现在绝望了。 我正在使用他们的API通过JSON调用加载twitter数据。我将所有内容存储在NSDictionary中,运行for循环以仅选择" text"值。我将过滤后的字典存储在我稍后在TableView初始化中使用的对象中。 我为自定义单元格创建了UItableViewCell的子类。 我的dataSources和delegates似乎也很好连接(至少我认为) 我很难找到问题所在。如果有人能帮助我,请。

#import "ViewController.h"
#import "myCell.h"
#import <TwitterKit/TwitterKit.h>

@interface ViewController ()
@end

@implementation ViewController
@synthesize myTableView;

NSMutableArray *tweetObject;
NSDictionary *dictionary;
NSString *name;
NSString *text;


- (void)viewDidLoad {
    tweetObject = [[NSMutableArray alloc] init];
    [super viewDidLoad];
    self.myTableView.dataSource = self;
    self.myTableView.delegate = self;
    text = @"text";
    [[Twitter sharedInstance] logInGuestWithCompletion:^(TWTRGuestSession *guestSession, NSError *error) {
        if (guestSession) {
            // make API calls that do not require user auth
            NSString *statusesShowEndpoint = @"https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=goofernator";
            NSError *clientError;
            NSURLRequest *request = [[[Twitter sharedInstance] APIClient]
                                     URLRequestWithMethod:@"GET"
                                     URL:statusesShowEndpoint
                                     parameters:0
                                     error:&clientError];

            if (request) {
                [[[Twitter sharedInstance] APIClient]
                 sendTwitterRequest:request
                 completion:^(NSURLResponse *response,
                              NSData *data,
                              NSError *connectionError) {
                     if (data) {
                         // handle the response data e.g.
                         NSError *jsonError;
                         NSDictionary *json = [NSJSONSerialization
                                               JSONObjectWithData:data
                                               options:0
                                               error:&jsonError];

                         for (NSDictionary *dataDict in json) {
                             NSString *text = [dataDict valueForKeyPath: @"text"];
                             dictionary = [NSDictionary dictionaryWithObjectsAndKeys:text,@"bodytext",nil];
                             [tweetObject addObject:dictionary];
                            }

                     }
                     else {
                         NSLog(@"Error: %@", connectionError);
                     }
                 }];
            }
            else {
                NSLog(@"Error: %@", clientError);
            }
        } else {
            NSLog(@"error: %@", [error localizedDescription]);
        }
    }];
    }

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return tweetObject.count;

}

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

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

    NSDictionary *tmpDict = [self.tweetObject objectAtIndex:indexPath.row];

    cell.txtLblOutput.text = [tmpDict objectForKey:text];
    [tableView reloadData];

    return cell;
}

@end

在这里,您可以看到我的故事板放在一起的方式以及我正在使用的参考资料

http://postimg.org/image/79w7pqmu3/

http://postimg.org/image/ixq9kabyz/

1 个答案:

答案 0 :(得分:0)

在填充阵列后,您应该在请求完成处理程序中调用[tableView reloadData];。检查您是否收到任何数据。数组是否填充了字典对象?

但是,伙计,严肃地说,你需要阅读一些关于编码的好书,你的代码真的缺乏对你正在做的事情的理解。请从[tableView reloadData];方法中删除- ...cellForRowAtIndexPath:...