JSON配列形式で提供されているWebストアのカテゴリデータをREST経由でiOSのコアデータに解析しようとしています。コアデータへの挿入を開始する前に、出力を画面に記録し、結果をカウントしてすべてが正常であることを確認しているだけです。
問題私のテストデータセットには152のカテゴリがありますが、ログに出力されるのは141の「最終カウンター」だけですか?
私は再帰関数を見て大丈夫だと信じています。そのため、問題はfindSubcategoriesForCategoryID関数のどこかにあると思いますか?
問題についてのフィードバックは、これが私を何時間も維持してくれたので、最もありがたいです。
Webサービスから返されるJSONデータの例:
Node: {
categoryID = 259;
categoryTitle = "Engine Parts";
parentID = 0; // Parent ID of 0 indicates a root category
}
Node: {
categoryID = 300;
categoryTitle = "Camshafts";
parentID = 259; // Parent ID indicates this category is a subcategory
}
Node: {
categoryID = 317;
categoryTitle = "Kent Camshafts";
parentID = 300;
}
次のメソッドは、これまでのアプリケーションで使用しているものです。
/**
* Kickstarts parsing operation
*/
- (void)parseCategoriesData:(NSArray *)downloadedData {
NSMutableDictionary *fakeCategory = [NSMutableDictionary dictionary];
[fakeCategory setObject:[NSNumber numberWithInt:0] forKey:@"categoryID"];
int counter = 0;
[self recursiveFunction:downloadedData parentCategory:fakeCategory counter:&counter];
NSLog(@"Final counter = %d", counter);
}
/**
* Recursive function to traverse the passed NSArray
*/
- (void)recursiveFunction:(NSArray *)array parentCategory:(id)parentCategory counter:(int *)i {
NSArray *subCategories = [self findSubcategoriesForCategoryID:[[parentCategory valueForKey:@"categoryID"] intValue] categoryData:array];
for (id object in subCategories) {
NSLog(@"Node: %@ depth: %d",[object description], *i);
*i = *i + 1;
[self recursiveFunction:array parentCategory:object counter:i];
}
}
/**
* Returns an NSArray of subcategories for the passed categoryID
*/
- (NSArray *)findSubcategoriesForCategoryID:(int)categoryID categoryData:(NSArray *)categoryData {
NSIndexSet *indexsForFilteredCategories = [categoryData indexesOfObjectsPassingTest:^(id obj, NSUInteger idx, BOOL *stop) {
return (BOOL)([[obj valueForKey:@"parentID"] intValue] == categoryID);
}];
return [categoryData objectsAtIndexes:indexsForFilteredCategories];
}