NSDictionary
让我困惑。它有点像我收集的结构和数组的混合。我正在阅读iOS编程书,它让我们将一个JSON对象放入NSDictionary
。对于具有键"标题"的对象,一切都很好。返回,但对于upcoming
类,upcoming
内有变量。在我看来,这就是NSDictionary
的构建方式。
struct classes {
NSString *title;
struct upcoming[] {
NSString *end_date;
NSString *start_date;
NSString *instructor;
}
}
}
我一直试图通过使用以下变体检索start_date
循环中的for
:
NSLog(@"%@", [course objectForKey:@"upcoming.start_date"]);
我这样做的目的是在title
个upcoming
个类中附加start_date
个字符串,并附加NSString *value = course[@"title"];
if ([course objectForKey@"upcoming"] [value stringByAppendingString:
@" course[@"upcoming.start_date"];
NSLog(@"%@", value);
个字符串。有点像...
upcoming
如何制作它以便如果upcoming.start_date
有一个或多个值,那么它会显示那些start_date值,方法是附加显示ELSE的字符串,它不会做任何事情?显然start_date
不是这样做的!并且title
本身没有指向相关NSString *title = [course objectForKey:@"title"];
NSArray *upcomingCourses = [course objectForKey:@"upcoming"];
if (upcomingCourses.count > 0
NSString *showDate = [NSString stringWithFormat:@"%@. Next Class Date: %@"
title, [[upcomingCourses objectAtIndex:0] objectForKey:@"start_date"]];
NSLog(@"%@", showDate);
}
else NSLog(@"%@", title);
的链接。我需要将它们连接起来以附加相应的字符串。
解决方案:
NSDictionary
NSLog
发布courses = (
{
title = "Advanced iOS Bootcamp";
upcoming = (
{
"end_date" = "2014-04-04";
instructors = Blocksom;
location = "BNR West, California";
"start_date" = "2014-03-31";
},
{
"end_date" = "2014-05-16";
instructors = Dalrymple;
location = "BNR West, California";
"start_date" = "2014-05-12";
},
{
"end_date" = "2014-06-20";
instructors = Ward;
location = "Atlanta, Georgia";
"start_date" = "2014-06-16";
}
);
url = "https://training.bignerdranch.com/classes/advanced-ios-bootcamp";
},
{
title = "Beginning iOS (iPhone/iPad)";
upcoming = (
{
"end_date" = "2014-04-18";
instructors = Mathias;
location = "BNR West, California";
"start_date" = "2014-04-12";
},
{
"end_date" = "2014-05-02";
instructors = "Keur, Ward";
location = "Atlanta, Georgia";
"start_date" = "2014-04-26";
},
{
"end_date" = "2014-05-23";
instructors = Christopher;
location = "Atlanta, Georgia";
"start_date" = "2014-05-17";
},
{
"end_date" = "2014-06-06";
instructors = Christopher;
location = "BNR West, California";
"start_date" = "2014-05-31";
},
{
"end_date" = "2014-07-25";
instructors = Ritchie;
location = "BNR West, California";
"start_date" = "2014-07-19";
},
{
"end_date" = "2014-08-01";
instructors = "Usiyan, Keur";
location = "Atlanta, Georgia";
"start_date" = "2014-07-26";
},
{
"end_date" = "2014-09-19";
instructors = Ritchie;
location = "BNR West, California";
"start_date" = "2014-09-13";
}
);
url = "https://training.bignerdranch.com/classes/beginning-ios";
},
{
title = "Mobile Design Bootcamp";
upcoming = (
{
"end_date" = "2014-06-13";
instructors = "Harper, Porter";
location = "BNR West, California";
"start_date" = "2014-06-09";
}
);
url = "https://training.bignerdranch.com/classes/mobile-design-bootcamp";
},
{
title = "Python Programming";
upcoming = (
{
"end_date" = "2014-04-24";
instructors = Cassell;
location = "Atlanta, Georgia";
"start_date" = "2014-04-21";
},
{
"end_date" = "2014-06-19";
instructors = Cassell;
location = "BNR West, California";
"start_date" = "2014-06-16";
}
);
url = "https://training.bignerdranch.com/classes/python-programming";
},
{
title = "Beginning iOS Game Development";
upcoming = (
{
"end_date" = "2014-06-20";
instructors = Strougo;
location = "BNR West, California";
"start_date" = "2014-06-16";
},
{
"end_date" = "2014-09-26";
instructors = Strougo;
location = "BNR West, California";
"start_date" = "2014-09-22";
}
);
url = "https://training.bignerdranch.com/classes/beginning-ios-game-development";
},
{
title = "Android Bootcamp";
upcoming = (
{
"end_date" = "2014-05-16";
instructors = Phillips;
location = "Atlanta, Georgia";
"start_date" = "2014-05-12";
},
{
"end_date" = "2014-06-20";
instructors = Marsicano;
location = "Atlanta, Georgia";
"start_date" = "2014-06-16";
},
{
"end_date" = "2014-07-11";
instructors = Stewart;
location = "BNR West, California";
"start_date" = "2014-07-07";
},
{
"end_date" = "2014-10-03";
instructors = Phillips;
location = "BNR West, California";
"start_date" = "2014-09-29";
}
);
url = "https://training.bignerdranch.com/classes/android-bootcamp";
},
{
title = "HTML5 Apps with jQuery";
upcoming = (
{
"end_date" = "2014-05-16";
instructors = Aquino;
location = "Atlanta, Georgia";
"start_date" = "2014-05-12";
},
{
"end_date" = "2014-06-13";
instructors = Gandee;
location = "Atlanta, Georgia";
"start_date" = "2014-06-09";
},
{
"end_date" = "2014-08-01";
instructors = Aquino;
location = "BNR West, California";
"start_date" = "2014-07-28";
}
);
url = "https://training.bignerdranch.com/classes/html5-apps-with-jquery";
},
{
title = "Ruby on the Server";
upcoming = (
{
"end_date" = "2014-06-13";
instructors = Stewart;
location = "Atlanta, Georgia";
"start_date" = "2014-06-09";
}
);
url = "https://training.bignerdranch.com/classes/ruby-on-the-server";
},
{
title = "iOS Bootcamp - Fast Track";
upcoming = (
{
"end_date" = "2014-07-11";
instructors = Usiyan;
location = "Atlanta, Georgia";
"start_date" = "2014-07-07";
}
);
url = "https://training.bignerdranch.com/classes/ios-bootcamp-fast-track";
},
{
title = "Cocoa I Bootcamp";
upcoming = (
{
"end_date" = "2014-07-25";
instructors = Preble;
location = "Atlanta, Georgia";
"start_date" = "2014-07-21";
}
);
url = "https://training.bignerdranch.com/classes/cocoa-i-bootcamp";
},
{
title = "OpenGL ES Bootcamp";
upcoming = (
{
"end_date" = "2014-07-25";
instructors = Blocksom;
location = "Atlanta, Georgia";
"start_date" = "2014-07-21";
}
);
url = "https://training.bignerdranch.com/classes/opengl-es-bootcamp";
}
);
:
{{1}}
}
答案 0 :(得分:3)
NSDictionary允许您按键检索对象。密钥只是另一个对象,但通常使用NSStrings(限制是密钥必须是唯一的,值不需要)。任何对象都可以存储在密钥下,因此在您的情况下即将到来的'是一组NSDictionaries。所以你得到了
dictionary {
title: someString
upcoming: array {
0: dictionary {
end_date: somestring
start_date: someString
instructor: someString
}
1: dictionary {
end_date: somestring
start_date: someString
instructor: someString
}
}
}
请注意,上述内容并非任何特定的语言或语法,只是“结构”的表示形式。你的数据。
要检索课程详情,您可以访问"即将发布的"对象就像任何其他对象一样,并将其分配给变量。
假设course
是您的根NSDictionary
:
NSString *title=(NSString *)[course objectForKey:@"title"];
NSArray *upcomingCourses=(NSArray *)[course objectForKey:@"upcoming"];
NSMutableString *startDates=[[NSMutablestring alloc]init];
for (int i=0;i<[upcomingCourses count];i++)
{
NSDictionary *upcomingCourse = (NSDictionary *)[upcomingCourses objectAtIndex:i];
NSString *startDate = (NSString *)[upcomingCourse objectForKey:@"start_date"];
NSString *endDate = (NSString *)[upcomingCourse objectForKey:@"end_date"];
NSString *instructor = (NSString *)[upcomingCourse objectForKey:@"instructor"];
[startDates appendFormat:@"%@, ",startDate];
}