大きなNSDictionary
があり、ループして個別のNSArray
sを作成する必要があります。内容は次のとおりです。
(
{
id = {
text = "";
};
sub = {
text = " , ";
};
text = "";
"thumb_url" = {
text = "";
};
title = {
text = "2010-2011";
};
type = {
text = "title";
};
},
{
id = {
text = "76773";
};
sub = {
text = "December 13, 2010";
};
text = "";
"thumb_url" = {
text = "http://www.puc.edu/__data/assets/image/0004/76774/varieties/thumb.jpg";
};
title = {
text = "College Days - Fall 2010";
};
type = {
text = "gallery";
};
},
{
id = {
text = "";
};
sub = {
text = "";
};
text = "";
"thumb_url" = {
text = "";
};
title = {
text = "2009-2010";
};
type = {
text = "title";
};
},
{
id = {
text = "76302";
};
sub = {
text = "December 3, 2010";
};
text = "";
"thumb_url" = {
text = "http://www.puc.edu/__data/assets/image/0019/76303/varieties/thumb.jpg";
};
title = {
text = "Christmas Colloquy";
};
type = {
text = "gallery";
};
}
)
各セクションにはタイプキーがあり、確認する必要があります。 title
キーが見つかったら、それらを配列に追加する必要があります。次に、gallery
キーを使用する次のセクションは、別のtitle
キーが見つかるまで独自の配列にある必要があります。その後、gallery
キーを独自の配列に入れます。
UITableView
セクションのタイトルとコンテンツを使用しています。したがって、上記のNSDictionary
には1つのNSArray *titles;
配列があり、他の2つの配列にはそれぞれタイトルの後に続くギャラリーが含まれている必要があります。
for
ループを使用してみましたが、正しく処理できないようです。任意のアイデアをいただければ幸いです。
あなたのログでは多少不明確ですが、あなたのNSDictionary
の値はNSDictionary
だと思いますか?もしそうなら:
NSMutableArray *titles = [NSMutableArray array];
// etc.
for (id key in sourceDictionary) {
NSDictionary *subDictionary = [sourceDictionary objectForKey:key];
if ([subDictionary objectForKey:@"type"] == @"title")
[titles addObject:[subDictionary objectForKey:@"title"]];
// etc.
}
あなたの質問は少し不明確です...しかし、これはあなたがNSDictionary
を適切にループする方法です。
編集:
NSMutableDictionary *galleries = [NSMutableDictionary dictionary];
NSString *currentTitle;
for (id key in sourceDictionary) {
NSDictionary *subDictionary = [sourceDictionary objectForKey:key];
NSString *type = [subDictionary objectForKey:@"type"];
if (type == @"title") {
currentTitle = [subDictionary objectForKey:@"title"];
if ([galleries objectForKey:currentTitle] == nil)
[galleries setObject:[NSMutableArray array] forKey:currentTitle];
} else if (type == @"gallery" && currentTitle != nil)
[[galleries objectForKey:currentTitle] addObject:subDictionary];
}
このループの後、galleries
には、タイプNSString
のキー(タイトルの値を含む)と、タイプNSArray
の対応するオブジェクト(ギャラリーの値を含むNSDictionarys
)。うまくいけば、これはあなたが望んでいたことです。
NSString *key;
for(key in someDictionary){
NSLog(@"Key: %@, Value %@", key, [someDictionary objectForKey: key]);
}
最新のObjective-C構文:
NSMutableArray *things = [NSMutableArray array];
NSMutableArray *stuff = [NSMutableArray array];
NSMutableArray *bits = [NSMutableArray array];
[dictionaries enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[things addObject:[obj valueForKeyPath:@"thing"]];
[stuff addObject:[obj valueForKeyPath:@"enclosing_object.stuff"]];
[bits addObject:[obj valueForKeyPath:@"bits"]];
}];