나는 분류 된 식료품 항목의 목록이 tableView
인 프로젝트가 필요합니다. 각 카테고리는 n 깊이를 가질 수 있습니다. API의 JSON
응답은 다음과 같습니다.JSON을 트리 구조로 구문 분석
"items":[
{
"id":"5366f8d3e4b0e44dc2d4a6fb",
"name":"String Cheese"
"description":"Sargento String Cheese",
"categorization":[
[
"Dairy",
"Cheese"
]
]
},
{
"id":"5366f8d3e4b0e44dc2d1a6fb",
"name":"Budlight 6-pk"
"description":"Budlight 12-pk",
"categorization":[
[
"Beverages",
"Alcohol",
"Beer"
]
]
}
]
지금은 항목 사전에서 Item 개체를 만들고 아래의 변경 가능한 배열에 저장하고 있습니다.
NSArray *itemsArray = [response objectForKey:items];
NSMutableArray *itemsMutableArray = [[NSMutableArray alloc] init];
for(NSDictionary *itemDict in itemsArray){
Item *itemObj = [[Item alloc] initWithDictionary:itemDict]
[itemsMutableArray addObject:itemObj];
}
나는 itemsMutableArray
을 순환에 좋아하고 각 항목에 루트에서 경로를 가지고있는 트리 데이터 구조를 만드는 것입니다. 그런 다음 각 수준의 범주에서 tableViews
에 대한 데이터 소스로 트리를 사용할 수 있기를 원합니다.
다음은 내 Item 클래스 헤더의 모양입니다.
@interface Item : NSObject
@property (nonatomic, strong) NSString *id;
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *description;
@property (nonatomic, strong) NSArray *categorization;
@end
... 그리고 구현 내가 트리 데이터 구조와 재귀에 익숙하지 않다
#import "Item.h"
@implementation Item
- (id)initWithDictionary:(NSDictionary *)objDictionary{
if (self = [super init]) {
self.id = [objDictionary valueForKey:@"id"];
self.name = [objDictionary valueForKey:@"name"];
self.description = [objDictionary valueForKey:@"description"];
self.categorization = [objDictionary valueForKey:@"categorization"];
}
return self;
}
@end
. 이 접근법에 대한 도움을 주시면 감사하겠습니다. 감사!
"루트에서 각 항목까지의 경로가있는 트리 데이터 구조를 만듭니다." 무슨 뜻이야? 무엇을 표시 하시겠습니까 ?? – meda
파싱 된 JSON (NSJSONSerialization에서 나온)은 이미 NSDictionary 객체의 NSArray 인 "트리 데이터 구조"입니다. NSDictionary 객체를 똑같은 데이터를 포함하는 사용자 정의 Item 객체로 대체하는 것뿐입니다. 왜?(그리고 재귀에 대한 필요성은 어디서 알 수 있습니까?) –
(위의 루프는'[itemArray addObject : itemObj];'라고 쓰여진 itemsMutableArray를 사용하려는 것입니다.) –