使用 NSDictionary 填充 UITableView,其中包含来自 mysql db 的已解析 JSON 数据

Posted

技术标签:

【中文标题】使用 NSDictionary 填充 UITableView,其中包含来自 mysql db 的已解析 JSON 数据【英文标题】:Populate UITableView with NSDictionary contained parsed JSON data from a mysql db 【发布时间】:2013-01-17 22:15:29 【问题描述】:

非常熟悉 android 编程,但对 ios(和 Objective-C)非常陌生。

我在我的应用程序中调用了一个远程 php 文件,并且(我相信)根据我的 NSLOG 结果成功解析了 JSON 结果。示例:

2013-01-17 14:24:30.611 JSON TESTING 4[1309:1b03] Deserialized JSON Dictionary = 
products =     (
            
        BF = "";
        EN = "2342";
        Measure = ft;
        Name = "Brian";
        "Name_id" = 1;
        Home = "New York";
        "DB_id" = 1;
    ,
            
        BF = "";
        EN = "2123";
        Measure = ft;
        Name = "Rex";
        "Name_id" = 3;
        Home = "New York";
        "DB_id" = 5;
    
);
success = 1;

我的问题在于如何将这些信息填充到表格视图中。我可以定制一个原型单元,但我该去哪里呢?

编辑:

这是我的视图设置代码:

#pragma mark - Table View

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    return productArray.count;
    NSLog(@"Number of arrays %u", productArray.count);


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

    static NSString *cellIdentifier = @"Cell";

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


    NSDictionary *productDictionary = [productArray objectAtIndex:indexPath.row];
    cell.textLabel.text = [productDictionary objectForKey:@"BF"];

    return cell;


- (void)viewDidLoad

    [super viewDidLoad];
    [self launchTest];

还有我的 .h 文件

@interface tpbaMasterViewController : UITableViewController 

    NSDictionary *lists;
    NSArray *productArray;


- (void) launchTest;

@property (strong, nonatomic) IBOutlet UITableView *tableView;



@end

【问题讨论】:

列表 = (NSDictionary *)jsonObject; productArray = [列出 objectForKey:@"products"]; 【参考方案1】:

您可以使用objectForKey 方法访问NSDictionary 中的对象。例如,要获取字典中产品的NSArray

NSArray *productArray = [myDictionary objectForKey:@"products"];

现在你有了一个包含两个字典对象的数组。对于各种UITableViewDataSource 方法,您可以查询数组。举几个例子:

对于– tableView:numberOfRowsInSection:,返回数组中的对象个数:

`return productArray.count;`

对于tableView:cellForRowAtIndexPath:

NSDictionary *productDictionary = [productArray objectAtIndex:indexPath.row];
    myCell.bfLabel.text = [productDictionary objectForKey:@"BF"];
    myCell.enLabel.text = [productDictionary objectForKey:@"EN"];
   //  continue doing the same for the other product information

如下所示在 .m 文件中声明 productArray 使其在您的视图控制器中可见(假设 productDictionary 是一个属性:

@interface MyCollectionViewController () 
    NSArray *productArray;

@end
...
@implementation MyCollectionViewController

    -(void)viewDidLoad
        [super viewDidLoad];

        productArray = [self.myDictionary objectForKey:@"products"];
    
...
@end

【讨论】:

使用新的 Objective-C 语法,您可以将 [myDictionary objectForKey:@"products"] 写成 myDictionary[@"products"] 谢谢。我在哪里声明我的 NSArray *productArray 以在我的 UITableViewDataSource 方法中使用它? @ADK - 您可以在 .m 文件的接口块中声明它。更新了我的答案以显示这一点。 感谢您的持续帮助,不胜感激。我在上面编辑了我的问题以显示我的支持代码。我的程序仍在运行,但 TableView 本身实际上没有填充任何内容(日志仍在正确吐出解析的 JSON,我没有粘贴该方法,因为我认为它工作正常)。 几件事...我看不到productArray 的设置位置,- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 中的代码行需要颠倒。

以上是关于使用 NSDictionary 填充 UITableView,其中包含来自 mysql db 的已解析 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从使用 JSONKit 创建的 NSDictionary 中正确填充 UITableView NSArray?

用 NSDictionary 填充数组

使用 JSON 和 AFNetworking NSDictionary 使用数据填充 tableview

使用 NSDictionary 填充 UITableView,其中包含来自 mysql db 的已解析 JSON 数据

如何将此 nsdictionary 数据填充到 uitableview

从 NSDictionary 填充 tableview