繁体   English   中英

AFNetworking JSON到UITableView-Objective-C

[英]AFNetworking JSON to UITableView - Objective-C

我正在开发我的第一个应用程序,并且开始把头撞在墙上。 我创建了一个C#Web API,它吐出了简单的JSON。 我正在使用AFNetworking并获得有效的响应(我相信),现在我想获取此JSON对象并将其转换为UITable。 这是代码。

这是我认为确实加载。

- (void)viewDidLoad
{
    [super viewDidLoad];

    KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"SMP" accessGroup:nil];
    NSString *password = [keychain objectForKey:(__bridge id)(kSecValueData)];
    NSString *username = [keychain objectForKey:(__bridge id)(kSecAttrAccount)];

    [[APIClient sharedManager] setUsername:username andPassword:password];

    [[APIClient sharedManager] getPath:@"/api/leads_calls/?$top=5&$orderby=CallStart%20desc"parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        self.leads_dict = responseObject;
        self.leads_calls = [[NSMutableArray alloc] init];
        [self.leads_calls addObject:self.leads_dict];

        NSLog(@"%@", self.leads_calls);

        [self.tableView setHidden:NO];
        [self.tableView reloadData];

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        // error stuff here
    }];
}

我可以在以下代码中断点,然后引发异常:

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

    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    if (self.leads_calls > nil) {
         // Here is where I get the exception
         cell.textLabel.text = [[self.leads_calls objectAtIndex:indexPath.row] objectForKey:@"CallerName"];
    }
    return cell;
}

最后,发生异常时的数组如下所示:

2013-06-06 14:32:11.372 SMP[39846:c07] (
        (
        {
            CallEnd = "2013-06-06T12:20:26";
            CallStart = "2013-06-06T12:11:56";
            CallerName = "xx & xx";
            CallerNo = xxxxxxxxxx;
            Handled = 0;
            ID = 1134514;
        },
        {
            CallEnd = "2013-06-06T11:36:41";
            CallStart = "2013-06-06T11:07:43";
            CallerName = "Las xx    NV";
            CallerNo = xxxxxxxxxx;
            Handled = 0;
            ID = 1134333;
        },
        {
            CallEnd = "2013-06-04T13:09:00";
            CallStart = "2013-06-04T12:58:36";
            CallerName = "xx LAW FI";
            CallerNo = xxxxxxxxxx;
            Handled = 0;
            ID = 1129882;
        },
                {
            CallEnd = "2013-06-03T16:43:31";
            CallStart = "2013-06-03T16:32:32";
            CallerName = "xx xx";
            CallerNo = xxxxxxxxxx;
            Handled = 0;
            ID = 1127940;
        },
                {
            CallEnd = "2013-06-03T07:46:16";
            CallStart = "2013-06-03T07:44:23";
            CallerName = "xx x";
            CallerNo = xxxxxxxxxx;
            Handled = 0;
            ID = 1125648;
        }
    )
)

我会费力地猜测cell.textLabel.text会得到一个意料之外的值,但是我不确定如何解决这个问题。

我认为您的数组中只有一个NSDictionary对象,而不是许多。

您试图在UILabel上设置的text属性肯定不是NSString因为它应该是。

responseObject的类是什么?

找出与:

NSLog(@"%@", [responseObject class]);

或在调试器中:

po [responseObject class]

也:

self.leads_calls > nil在Objective-C中不是常见的约定。 self.leads_calls.count > 0更好

编辑

好吧,废弃字典leads_dict并做self.leads_calls = responseObject

然后在cellForRowAtIndexPath执行以下操作:

cell.textLabel.text = [[self.leads_calls objectAtIndex:indexPath.row] objectForKey:@"CallerName"];

如您所料(在我键入ha后实现)

编辑2

您需要实现UITableViewDelegate方法

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

确保仅在UITableView中创建的单元格数量与数组中的对象数量匹配。

如果您是我,我也会考虑为您的响应对象创建一个模型类,这也许会使您的生活变得更轻松。

痛苦不堪,但您有字典,并且在数组中有数组:

2013-06-06 14:32:11.372 SMP[39846:c07]
(
    (
        {

注意有2个圆括号...

因此, leads_dict并不是真正的字典,它是一系列字典。 同时拥有leads_dictleads_calls似乎leads_calls过头了,请删除其中之一。 确保剩下的一个是数组,并使用该数组来驱动表视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM