4

私は、restKit を使用して Foursquare からデータを取得する方法を研究しようとしています。

私はこのチュートリアルを使用しています。

このコードの使用

私はいくつかの異なるものを作ろうとしているので、カテゴリからデータを取得しようとしています。

ここでは、foursqure の json は次のようになります

   {
  venue: {
    id: "40a55d80f964a52020f31ee3",
    name: "Clinton St. Baking Co. & Restaurant",
    contact: {
      phone: "6466026263",
      formattedPhone: "(646) 602-6263"
    },
    location: {
      address: "4 Clinton St",
      crossStreet: "at E Houston St.",
      lat: 40.721294,
      lng: -73.983994,
      postalCode: "10002",
      city: "New York",
      state: "NY",
      country: "United States",
      cc: "US"
    },
    canonicalUrl: "https://foursquare.com/v/clinton-st-baking-co--restaurant/40a55d80f964a52020f31ee3",
    categories: [
      {
        id: "4bf58dd8d48988d143941735",
        name: "Breakfast Spot",
        pluralName: "Breakfast Spots",
        shortName: "Breakfast / Brunch",
        icon: {
          prefix: "https://foursquare.com/img/categories_v2/food/breakfast_",
          suffix: ".png"
        },
        primary: true
      },
      {
        id: "4bf58dd8d48988d16a941735",
        name: "Bakery",
        pluralName: "Bakeries",
        shortName: "Bakery",
        icon: {
          prefix: "https://foursquare.com/img/categories_v2/food/bakery_",
          suffix: ".png"
        }
      },
      {
        id: "4bf58dd8d48988d16d941735",
        name: "Café",
        pluralName: "Cafés",
        shortName: "Café",
        icon: {
          prefix: "https://foursquare.com/img/categories_v2/food/cafe_",
          suffix: ".png"
        }
      }
    ],

  }
}

ここに統計を取得するチュートリアルの一部があります

@interface Venue : NSObject

@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) Stats *stats;


@interface Stats : NSObject

@property (nonatomic, strong) NSNumber *checkinsCount;
@property (nonatomic, strong) NSNumber *tipCount;
@property (nonatomic, strong) NSNumber *usersCount;

マッピング部分

RKObjectMapping *statsMapping = [RKObjectMapping mappingForClass:[Stats class]];
    [statsMapping addAttributeMappingsFromArray:@[@"checkinsCount", @"tipCount", @"usersCount"]];
    RKRelationshipMapping *statsRelation = [RKRelationshipMapping relationshipMappingFromKeyPath:@"stats" toKeyPath:@"stats" withMapping:statsMapping];
    [venueMapping addPropertyMapping:statsRelation];

マッピング後。

次のように簡単にデータを取得できます

NSLog(@"%i",venue.stats.checkinsCount);

そして、checkinsCount番号を出力します

今、カテゴリデータを取得しようとしています。新しいデータを取得するようにコードを修正します。

このようなものを追加

@interface Venue : NSObject

@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) Categories *categories;

@interface Categories : NSObject

@property (nonatomic, strong) NSString *name;
@property (nonatomic ,strong) NSString *pluralName;

このようにマッピングを追加します

RKObjectMapping *categoriesMapping = [RKObjectMapping mappingForClass:[Categories class]];
    [categoriesMapping addAttributeMappingsFromDictionary:@{@"name":@"name",@"pluralName":@"pluralName"}];
    RKRelationshipMapping *cate = [RKRelationshipMapping relationshipMappingFromKeyPath:@"categories" toKeyPath:@"categories" withMapping:categoriesMapping];
    [venueMapping addPropertyMapping:cate];

今、私はカテゴリ名を取得しようとしています

NSLog(@"%@",venue.categories.pluralName);

しかし、それは常にnullになります

データ型に問題があると思いますか?

3 つの名前があり、それらすべてを印刷する方法がわかりません。

申し訳ありませんが、私の母国語は英語ではないため、状況をうまく説明できません。

4

1 に答える 1

8

JSON では、カテゴリは配列であるため、マップしようとしているプロパティは次のようになります。

@property (strong, nonatomic) NSArray *categories;

ロギング コードを変更して、カテゴリを反復する必要があります。

for (Categories *category in venue.categories) {
    NSLog(@"%@", category.pluralName);
}

クラス Categories は、実際にはコレクション オブジェクトではないため、誤解を招く名前になっています (当初意図したようです)。

于 2013-05-25T22:38:36.927 に答える