0

ここで同様の質問をしましたが、直面している問題に対する答えが見つかりませんでした..

これまで、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"},

等々..

ご覧のとおり、辞書の配列の辞書です。したがって、最初に生データを辞書に保存し、valueforkey = storesを抽出して配列に保存しました。その後、各フィールドを抽出し、カスタム オブジェクト 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;

前もって感謝します。

4

2 に答える 2

2

最初にNSMutableArrayを割り当てて、最初に配列を合成してください

お気に入りpopulatedStoreArray = [[NSMutableArray alloc] init];

于 2012-04-20T07:26:22.920 に答える
0

Cocoa Mattersが上記で述べたように、populatedStoreArrayが割り当てられ、初期化されていることを確認する必要があります。オブジェクトをnil配列に追加しようとしても、objective-cはエラーになりません。したがって、オブジェクトを追加したように見えますが、そうではありません。

また、実際のコードかどうかはわかりませんが、tempStoreの割り当てと初期化は1回だけであることに気付きました。したがって、配列をループしてtempStore.addressを設定し、毎回同じオブジェクトを追加するため、配列にtempStoreオブジェクトが1つだけ存在することになります。の各反復で、新しい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]);
}
于 2012-04-20T08:23:09.477 に答える