0

これを数回試しましたが、JSONフィードにアクセスして、取得する必要があるものを取得する方法がまだわかりません。

フィードは次のようになります。私のコードでは、すべてのタイトルを取得しようとしています。Jsonフィードにアクセスする方法がわかりません。

ここに画像の説明を入力してください

    - (void)viewDidLoad
    {
        [super viewDidLoad];


        [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

        NSURL *url = [NSURL URLWithString:@"http://api.storageroomapp.com/accounts/511a4f810f66026b640007b8/collections/511a51580f66023bff000ce9/entries.json?auth_token=Zty6nKsFyqpy7Yp5DP1L&preview_api=1"];

        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        [[NSURLConnection alloc] initWithRequest:request delegate:self];



        // Do any additional setup after loading the view from its nib.
    }

    -(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:nil error:nil];
        [mainTableView reloadData];
    }

    -(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
        UIAlertView *errorView = [[UIAlertView alloc] initWithTitle:@"Error" message:@"The data could not be downloaded - please make sure you're connected to either 3G or Wi-FI" delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
        [errorView show];
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    }


    -(int)numberOfSectionsInTableView:(UITableView *)tableView{
        return  1;
    }
    -(int)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
        return [news count];
    }

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

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MainCell"];
        if (cell == nil) {
            cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"MainCell"];


            cell.textLabel.text = [[news objectAtIndex:indexPath.row] objectForKey:@"title"];

        }

        return cell;
    }

そして私の.HにはNSArray*newsがあります。およびNSMutableData*data。

私はこの言語の全くの初心者なので、どんな助けでも素晴らしいでしょう、あなたはあなたの自己をはっきりと説明してください。

4

1 に答える 1

2

コードに含まれているロジックと投稿したサンプルJSONを見ると、配列に必要なものが入力されているようには見えません。

最初は、JSONは辞書の形式になっています(したがって、提供した画像の中括弧)。したがって、JSONの最初の解析を次のように調整する必要があります。

NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:nil error:nil];

ここから、辞書からキーを受け取ることができます。あなたが探しているのは「配列」です。これは、その名前にもかかわらず、実際には辞書でもあります。

NSDictionary *arrayDictionary = dictionary[@"array"];

右に進むと、最終的に探している「resources」配列にアクセスでき、.hファイルで作成したインスタンス変数内にそれを格納できます。

news = arrayDictionary[@"resources"];

これで、このcellForRowAtIndexPathメソッドでは、提供されたインデックスパス行に基づいてこの配列のさまざまな要素にアクセスできます。

NSDictionary *newsItem = news[[indexPath row]];

最後に、そのニュースアイテムのタイトルなどのさまざまなプロパティにアクセスし、テキストラベルのテキストを設定できます。

NSString *title = newsItem[@"title"];
[[cell textLabel] setText:title];
于 2013-02-12T16:57:55.187 に答える