NSArray中有ItemObject。此ItemObject未根据ItemID
进行分组json的示例如下所示: 你会注意到itemIDs“a123”,“a124”。可以有n个itemID。
[
{
"ItemName": "John",
"ItemID": "a123"
},
{
"ItemName": "Mary",
"ItemID": "a124"
},
{
"ItemName": "Larry",
"ItemID": "a123"
},
{
"ItemName": "Michel",
"ItemID": "a123"
},
{
"ItemName": "Jay",
"ItemID": "a124"
}
]
上述响应存储在NSArray中,如下所示:
NSMutableArray *itemArray=[[NSMutableArray alloc] init];
ItemObject *obj=[[ItemObject alloc] init];
obj.itemName=@"John";
obj.itemID=@"a123";
[itemArray addObject:obj]
.....
ItemObject *objN=[[ItemObject alloc] init];
objN.itemName=@"Jay";
objN.itemID=@"a124";
[itemArray addObject:objN].
这表明,如果JSON中有N个项目,那么它将创建一个包含N个项目的数组。
以上项目在UItableView中正确显示。
现在,如果想要对它们进行排序并将它们放在NSMutableArray组中,那将是最佳的代码编码方式,消耗更少的内存。 [即排序+分组] 我正在努力实现以下目标:
NSMutableArray *itemArray=[[NSMutableArray alloc] init];
at index 0: NSArray with itemID "a123"
at index 1: NSArray with itemID "a124"
因为可用的ItemIds是动态的,正如我所解释的那样,itemId的数量可以是“N”。
第1步: 所以,我首先需要找到可用的itemId。
第2步:
NSMutableArray *myArray=[[NSMutableArray alloc] init];
for(NSString *itemID in itemIDS){
NSArray *itemsForID=[itemArray filterUsingPredicate:[NSPredicate predicateWithFormat:"itemID MATCHES %@",itemID]];
[myArray addObject:itemsForID];
}
myArray是预期的结果。 但是使用filterUsingPredicate“N”次会耗费时间和内存。
任何,帮助感谢。
答案 0 :(得分:1)
请试试下面的代码吗?
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"itemID" ascending:YES];
[itemArray sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];
答案 1 :(得分:0)
您可以将数据保存为NSManagedObjects。然后,您可以使用NSFetchedResultsController作为表的数据源(您设置排序描述符和部分名称键路径):
NSFetchedResultsController *controller = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:context
sectionNameKeyPath:nil
cacheName:nil];
您还可以设置批量大小(一次从DB获取的最大对象数)。
希望这有帮助!