当前位置: 首页 > 知识库问答 >
问题:

json元素未传递到表视图

巫马俊力
2023-03-14

我有一个简单的JSON提要,我可以解析它并在控制台中看到它,但我似乎无法将它显示在我的表视图中。我使用的是Xcode 5.0.2。我不确定为什么在回显到控制台时可以在for循环中看到它,而在表视图中却看不到它。

[
    {
        "first_name": "Bill"
    },
    {
        "first_name": "Ted"
    },
    {
        "first_name": "George"
    } etc...
]
#import 
#import "DisplayViewController.h"

@interface PhotosTableViewController : UITableViewController {

    IBOutlet UITableView *mainTableView;

   NSArray *news;
   NSMutableData *data;

}

@end

PhotoTableViewController.m


@interface PhotosTableViewController () {
    NSMutableArray *photos;
    NSArray *_locations;

}

   - (void)viewDidLoad
{

    NSURL *url = [NSURL URLWithString:@"http://feedurl.json"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [[NSURLConnection alloc] initWithRequest:request delegate:self];

}

// some code left out for brevity


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    //return photos.count;
    NSLog(@"news count: %lu", news.count);

    return news.count;
}


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

    cell.textLabel.text = [[photos objectAtIndex:indexPath.row] objectForKey:@"first_name"];
    NSLog(@"anything: %@", [[photos objectAtIndex:indexPath.row] objectForKey:@"first_name"] );


    return cell;

}



- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    data = [[NSMutableData alloc] init];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)theData
{
    [data appendData:theData];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

    news = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

    NSDictionary *first_name;

   for (int i=0; i (cant put less than sign here breaks code view) [news count] i++)
    {
        first_name = [news objectAtIndex:i];
        NSLog(@"Statuses: %@", [first_name objectForKey:@"first_name"]);
   }


    [mainTableView reloadData];

}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    UIAlertView *errorView = [[UIAlertView alloc] initWithTitle:@"Error" message:@"The download could not complete - please make sure you're connected to the internet." delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];

    [errorView show];
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

共有1个答案

申屠森
2023-03-14

通过检查,您的代码看起来正常。您似乎没有使用UITableViewController子类,因为您有名为tableview,所以您必须在Interface Builder或代码中设置dataSource和delegate属性。在IB中,右键单击tableView对象,在connections列表的顶部有delegate和dataSource出口。从圆形拖动到viewController。在代码中,您可以在.m文件中这样做:

// Claim that your view controller conforms to the tableview protocols
@interface YourViewControllerClass () <UITableViewDataSource, UITableViewDelgate>
...
// somewhere early on, like in viewDidLoad or viewDidAppear or other initialization code
mainTableView.delegate = self;
mainTableView.dataSource = self;

当我遇到这些问题时,我倾向于在tableView方法中添加NSLogs以查看它们是否被调用。

 类似资料:
  • 问题内容: 我想创建一个指令来组织按日期分组的显示数据。我还希望能够指定将显示各个行的指令。在一个完美的世界中,它看起来像这样(但又漂亮又漂亮) 这显然是行不通的,因此,如果您有更好的方法,请告诉我,但我希望能够按照以下方式做点事情: 然后像这样使用它: 我知道这很丑陋(并且不起作用,但是我敢肯定我可以通过一些调整使其工作),所以我真正要问的是,有没有更好的方法来做到这一点? 问题答案: 这个问题

  • 问题内容: 我正在尝试在隐藏字段中发布数组,并希望在PHP中提交表单后检索该数组。 但是在打印发布的值后,我只能得到一个数组字符串。那么我该如何解决呢? 问题答案: 采用: 您将得到一个数组。

  • 我们可以在源标签中实现lazyload到图片元素中。但是我们只有一个img标签,我们可以在这个img标签的src属性中加载lazyload占位符映像。因此,如果我想为每个懒加载的图像设置单独的懒加载占位符,有没有办法实现它?我需要这个,因为我想为便携式设备和桌面设置不同的相框。比方说,一张图像对于便携式设备具有较高的高度值(如果视口小于1200px,将被加载),另一张图像对于桌面视口具有较高的宽度

  • 问题内容: 只是不明白我在做错什么。.我一直在寻找许多类似的问题,但仍然存在误解…当我从JS调用CallHandler函数时,我总是收到“请求失败”警报。请帮我。 JS / jQuery: asp.net C#代码背后: 问题答案: 尝试 编辑 我从属性名称中删除了引号 另外,JSON字符串需要以其他方式读取 一个可行的解决方案

  • 我在TableViewController的单元格中有一个图形视图,我希望将一个数组从TableViewController传递给该视图。我该如何解决这个问题?

  • URL:http://bcmprod.brill.com/rsuite-cms/ 我正在尝试从上面的客户端站点自动下载手稿。我在C#中使用selenium phantomjs。 我有用户凭据。但是,组成登录表单的元素(例如用户名、密码)在页面源中不存在,但当您在浏览器中检查这些元素时,这些元素就存在了。 这些是我用来从“检查元素”中定位它们的xpath(ID是动态分配的,这就是我没有使用它们的原因