繁体   English   中英

在iOS(Objective-c)中解析JSON数据并在TableView中显示。 获得空值

[英]Parsing JSON data in iOS (Objective-c) and displaying in TableView. Getting empty values

我在这里遇到了类似的问题,但没有找到我正面临的问题的答案。

到目前为止,我已经能够解析JSON数据并存储在字典中。 以下是JSON数据的原始形式:

{"stores":[{"address":"7801 Citrus Park Town Center Mall","city":"Tampa","name":"Macy's","latitude":"28.068052","zipcode":"33625","storeLogoURL":"http://strong-earth-32.heroku.com/images/macys.jpeg","phone":"813-926-7300","longitude":"-82.573301","storeID":"1234","state":"FL"},

{"address":"27001 US Highway 19N","city":"Clearwater","name":"Dillards's","latitude":"27.9898988","zipcode":"33761","storeLogoURL":"http://strong-earth-32.heroku.com/images/Dillards.jpeg","phone":"727-296-2242","longitude":"-82.7294986","storeID":"1235","state":"FL"},

等等..

如您所见,它是一个字典数组的字典。 因此,我首先将原始数据存储在字典中,提取key = storesvalue并将其存储在数组中。 之后,我提取了每个字段并将其存储在自定义对象tempStore中。 这是失败的时候。

- (void)viewDidLoad
{
[super viewDidLoad];
[populatedStoreArray addObject:@"blah"];
NSString *jsonRawData = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://strong-earth-32.heroku.com/stores.aspx"]];

if([jsonRawData length] == 0)
{
    [jsonRawData release];
    return;
}
SBJsonParser * parser = [[SBJsonParser alloc]init];
resultData = [[parser objectWithString:jsonRawData error:nil]copy];
NSArray *storeArray = [[NSArray alloc]init];
storeArray= [resultData objectForKey:@"stores"];
Store *tempStore = [[Store alloc]init];

/*NSLog(@"show me stores: %@", storeArray);*/
for(int i=1;i<[storeArray count];i++)
{
    NSDictionary *tempDictionary = [storeArray objectAtIndex:i];
    if([tempDictionary objectForKey:@"address"]!=nil)
    {
        tempStore.address= [tempDictionary objectForKey:@"address"];
        //NSLog(@"Address: %@",tempStore.address);
    }
    //and so on for other keys
    [populatedStoreArray addObject:tempStore]; 
    NSLog(@"In array: %@",[populatedStoreArray objectAtIndex:i]);
}

这是tempStore对象:

- (id) init 
{
    if (self = [super init])
    {
    self.address = @"address";
    self.city = @"city";
    self.name = @"name";
    self.latitude = @"latitude";
    self.longitude = @"longitude";
    self.state = @"state";
    self.phone = @"phone";
    self.storeid = @"storeID";
    self.url = @"storeLogoURL";
    self.zipcode = @"zipcode";
    }
    return self;
}

现在,我使用populatedStoreArray来填充表格的单元格。 我不确定要显示的格式,但我主要担心的是当我尝试打印populatedStoreArray时,即使已经填充了tempStore,其内容仍为null。 我在这里错过了什么? 此外,populatedStoreArray在.h文件中声明为属性。

@property (nonatomic, strong) NSMutableArray * populatedStoreArray;

提前致谢。

请先分配你的NSMutableArray,然后首先合成你的数组

populatedStoreArray = [[NSMutableArray alloc] init];

正如Cocoa Matters上面所说,你需要确保你的populatedStoreArray被分配和初始化,当你尝试将对象添加到nil数组时,objective-c没有错误,所以它看起来像你添加它们,但你不是。

另外我不知道它是否是你的实际代码,但我注意到你只分配并初始化tempStore一次。 所以你循环遍历数组并设置tempStore.address并每次添加相同的对象,所以你只会在数组中得到一个tempStore对象,你需要在每次迭代中分配和初始化一个新的tempStore对象。你的循环:

Store *tempStore;

/*NSLog(@"show me stores: %@", storeArray);*/
for(int i=1;i<[storeArray count];i++)
{
    tempStore = = [[Store alloc]init];

    NSDictionary *tempDictionary = [storeArray objectAtIndex:i];
    if([tempDictionary objectForKey:@"address"]!=nil)
    {
        tempStore.address= [tempDictionary objectForKey:@"address"];
        //NSLog(@"Address: %@",tempStore.address);
    }
    //and so on for other keys
    [populatedStoreArray addObject:tempStore]; 
    NSLog(@"In array: %@",[populatedStoreArray objectAtIndex:i]);
}

暂无
暂无

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

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