0

現在、ニュースセクション用のUITableViewを持つアプリケーションに取り組んでいます。ニュースを取得してtableViewのセルに入力するAPI呼び出しを行います。現在、JSONを介してデータを返していますが、JSONの応答は次のようになります:(改行を入れると、構造を読み取るのが少し簡単になります)

[
    {
        "news_id": "1",
        "news_title": "Sample headline",
        "news_date": "2012-12-19",
        "news_news": "news article 1",
        "news_priority": "3"
    },
    {
        "news_id": "2",
        "news_title": "On the Outside, Looking in",
        "news_date": "2012-11-20",
        "news_news": "news article 2",
        "news_priority": "2"
    },
    {
        "news_id": "3",
        "news_title": "Fla. Plans to Mark Death Penalty's Return",
        "news_date": "2012-12-23",
        "news_news": "news article 3",
        "news_priority": "1"
    }
]

PHPを介したJSONエンコーディングの前は、私の配列は次のようになっています。

Array
(
[0] => Array
    (
        [news_id] => 1
        [news_title] => Sample headline
        [news_date] => 2012-12-19
        [news_news] => news article 1
        [news_priority] => 3
    )
[1] => Array
    (
        [news_id] => 2
        [news_title] => On the Outside, Looking in
        [news_date] => 2012-11-20
        [news_news] => news article 2
        [news_priority] => 2
    )
[2] => Array
    (
        [news_id] => 3
        [news_title] => Fla. Plans to Mark Death Penalty's Return
        [news_date] => 2012-12-23
        [news_news] => news article 3
        [news_priority] => 1
    )
)

次のようにして応答を保存しています。

// populate the dictionary with the json response.
NSDictionary *data = [NSJSONSerialization JSONObjectWithData:returnData options:NSJSONReadingMutableContainers error:&error];
return data;

// model has a method to construct the url request/connection etc   
NSDictionary *newsDict = [model makeServerAPICall:kURL postMessage:@"method=getNews"];
NSString *string = [newsDict objectForKey:@"news_id"];

この時点までは、配列内の要素にアクセスしようとすると、次のエラーでクラッシュすることを除いて、すべてが正常に表示されています。

-[__ NSArrayM objectForKey:]:これはNSDictionaryですが、認識されないセレクターがインスタンス0xab13a40に送信されました。「データ」はNSDictionaryであるため、この時点ではかなり混乱しています。

news_titleがセルにリストされている返されたデータを使用してtableViewを設定しようとしています。選択すると、その記事の相対データを表示する詳細ビューにプッシュされます。返されるデータが非常に単純なJSON形式である多くのAPI呼び出しを行いました。これは、JSON応答から複数の配列を含むデータを抽出する最初の試みです。正直なところ、この時点で私はここから他にどこに行くべきかわかりません。どんな助けでも大歓迎です。

4

3 に答える 3

1

あなたは静かに混乱しています。

  • サーバーから辞書を取得していません。
  • あなたが実際に得ているのは、辞書の配列です。
  • したがって、[model makeServerAPICall:kURL postMessage:@"method=getNews"];辞書は返されません。
  • 実際には辞書の配列を返します。

したがって、このコードは問題を解決します。

NSArray *dictArray = [model makeServerAPICall:kURL postMessage:@"method=getNews"];
for(NSDictionary *newsDict in dictArray){
    NSString *string = [newsDict objectForKey:@"news_id"];
    NSLog(@"%@", string);
}

それはあなたの問題を解決します。

于 2012-12-24T06:31:52.193 に答える
1

JSONKitを使用します。ここで入手できます:https://github.com/johnezang/JSONKit

NSArray *arrJSONData = //your JSON array
NSString *strJSON = [arrJSONData JSONString];
NSLog("Data:%@",strJSON);
于 2012-12-24T06:14:33.670 に答える
0

「「データ」はNSDictionaryであるため、この時点ではかなり混乱しています。」

いいえ、そうではありません。配列です。これが、JSONプリントアウトで角かっこが意味することです。データをNSDictionaryとして宣言したからといって、それを1つにしないでください。NSJSONSerializationメソッドによって返されるオブジェクトになります。配列と辞書のどちらを取得するかわからない場合は、使用する前にそのクラスを確認する必要があります。

于 2012-12-24T05:20:15.093 に答える