我有一个iPhone应用程序,它从服务器获取json字符串并对其进行解析。它包含一些数据,例如,学校时间表信息。数据存储在nsdictionary中,然后传递到nsmuttablearray中。例如:
有没有人能告诉我正确的方向/告诉我如何访问数组的不同“根”?我希望将具有字段'Day‘的元素存储为’星期一‘(或者您可以告诉我如何对它们进行排序/搜索)。我花了相当多的时间试图找到关于这方面的一些信息(如何访问/更改嵌套值),但没有运气=/。谢谢..
发布于 2011-07-28 08:49:20
要使用Day =星期一访问所有Dictionary对象,最好的办法是使用带有关键路径的谓词...
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"Day == 'Monday'"];
NSArray* mondayCourses = [rows filteredArrayUsingPredicate:predicate];
您也可以使谓词成为动态的。
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"Day == %@", dayOfTheWeek];
其中,dayOfTheWeek可以是一个在循环中保存当前日期的NSString,等等。
如果要对数组进行排序,可以使用排序描述符。
NSSortDescriptor* idSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"id"
ascending:YES];
NSSortDescriptor* levelSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"Level"
ascending:YES];
NSArray* sortedMondayRows = [mondayRows sortedArrayUsingDescriptors:[NSArray arrayWithObjects:idSortDescriptor, levelSortDescriptor, nil]];
发布于 2011-07-28 06:31:09
在URL:http://jsonlint.com/中检查您的JSON是否正确。如果它是正确的,请阅读如何通过谷歌解析JSON文件。您是否正在使用任何特定的框架来解析JSON文件?
发布于 2011-07-28 07:46:44
首先看一下苹果关于NSArray和NSDictionary的文档。在本例中,该数组(一个NSArray)包含许多NSDictionaries。
将数据存储在nsdictionary中,然后将其传递到nsmuttablearray。
首先,我必须注意到Objective-C中的变量只是指针。当你有这样一行代码时:
NSMutableArray *rows;
您只需要说:“我希望这个变量指向一个NSMutableArray。”它相当于,
id rows;
…在运行时,您不会被阻止将正则数组放入为可变数组声明的变量中(或将字符串放入为字典声明的变量中!)。看起来不错!但是,当您尝试对非可变数组执行可变操作,或对字符串执行字典操作时,您的程序将崩溃。
将它声明为指向NSMutableArray的指针,而不是id,有几个优点:
所以,即使你的变量被声明为NSMutableArray *rows
,在下面这一行:
rows = [[dict objectForKey:@"courses"] retain];
…如果“课程”对象不是可变的,那么rows
中的对象也不是可变的。相反,您可以这样做:
rows = [[dict objectForKey:@"courses"] mutableCopy];
…获取您自己的数组的NSMutableArray副本(您必须释放它,就像保留原始的一样)。
您可以使用标准Cocoa代码探索数组和字典。以下是获取所有“星期一”课程的一种方法:
NSMutableArray *mondayCourses = [NSMutableArray array];
for (NSDictionary* course in rows){
if([[course objectForKey:@"Day"] isEqual:@"Monday"]){
[mondayCourses addObject:course];
}
}
(警告,我尚未运行此代码。)
https://stackoverflow.com/questions/6851398
复制相似问题