2010-08-17 73 views
2

我正在使用JSON API的应用程序,我正在使用目标C框架的JSON来获取数据到NSDictionary。这本字典洛斯这样的:NSDictionary筛选和排序

({ 
    admitted = "<null>"; 
    agreed = "<null>"; 
    "area_id" = 1; 
    "area_name" = "Digitales, Urheber-/Patentrecht, Datenschutz"; 
    created = "2010-08-17 12:41:03"; 
    "current_draft_content" = Bla Bla Bla"; 
    "current_draft_created" = "2010-08-17 12:42:44"; 
    "current_draft_formatting_engine" = compat; 
    "discussion_url" = "http://piratenpad.de/OpenSourceZwang"; 
    id = 502; 
    "informed_supporter_count" = 11; 
    "issue_accepted" = ""; 
    "issue_admission_time" = "8 days"; 
    "issue_closed" = ""; 
    "issue_created" = "2010-08-17 12:41:03"; 
    "issue_discussion_time" = "15 days"; 
    "issue_fully_frozen" = ""; 
    "issue_half_frozen" = ""; 
    "issue_id" = 242; 
    "issue_population" = 372; 
    "issue_ranks_available" = 0; 
    "issue_state" = new; 
    "issue_verification_time" = "8 days"; 
    "issue_vote_later" = 0; 
    "issue_vote_now" = 0; 
    "issue_voter_count" = "<null>"; 
    "issue_voting_time" = "8 days"; 
    name = "Alte & unsupportete Software, muss Open Source werden"; 
    "negative_votes" = "<null>"; 
    "policy_initiative_quorum_den" = 100; 
    "policy_initiative_quorum_num" = 10; 
    "policy_issue_quorum_den" = 100; 
    "policy_issue_quorum_num" = 10; 
    "policy_majority_den" = 2; 
    "policy_majority_num" = 1; 
    "policy_majority_strict" = 1; 
    "positive_votes" = "<null>"; 
    rank = "<null>"; 
    revoked = "<null>"; 
    "satisfied_informed_supporter_count" = 7; 
    "satisfied_supporter_count" = 7; 
    "suggested_initiative_id" = "<null>"; 
    "supporter_count" = 11; 
}, 
    { 
    admitted = "<null>"; 
    agreed = "<null>"; 
    "area_id" = 1; 
    "area_name" = "Digitales, Urheber-/Patentrecht, Datenschutz"; 
    created = "2010-08-17 14:09:14"; 
    "current_draft_content" = "Bla Bla Bla"; 
    "current_draft_created" = "2010-08-17 14:09:31"; 
    "current_draft_formatting_engine" = compat; 
    "discussion_url" = ""; 
    id = 508; 
    "informed_supporter_count" = 0; 
    "issue_accepted" = "2010-08-14 01:51:45"; 
    "issue_admission_time" = "15 days"; 
    "issue_closed" = ""; 
    "issue_created" = "2010-08-14 01:34:26"; 
    "issue_discussion_time" = "30 days"; 
    "issue_fully_frozen" = ""; 
    "issue_half_frozen" = ""; 
    "issue_id" = 30; 
    "issue_population" = 603; 
    "issue_ranks_available" = 0; 
    "issue_state" = accepted; 
    "issue_verification_time" = "15 days"; 
    "issue_vote_later" = 9; 
    "issue_vote_now" = 0; 
    "issue_voter_count" = "<null>"; 
    "issue_voting_time" = "15 days"; 
    name = "Grundrecht: Alternative Formulierung"; 
    "negative_votes" = "<null>"; 
    "policy_initiative_quorum_den" = 100; 
    "policy_initiative_quorum_num" = 10; 
    "policy_issue_quorum_den" = 100; 
    "policy_issue_quorum_num" = 10; 
    "policy_majority_den" = 3; 
    "policy_majority_num" = 2; 
    "policy_majority_strict" = 0; 
    "positive_votes" = "<null>"; 
    rank = "<null>"; 
    revoked =   { 
    }; 
    "satisfied_informed_supporter_count" = 0; 
    "satisfied_supporter_count" = 0; 
    "suggested_initiative_id" = "<null>"; 
    "supporter_count" = 0; 
} 
) 

有什么好办法让所有的对象,其中“ISSUE_ID”是2奥德6或什么都显示分组UITabeView用在一个相同的“ISSUE_ID”的所有对象组?

回答

2

您可以使用NSSortDescriptor排序:

NSSortDescriptor *dateSortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"issue_id" ascending:YES selector:@selector(compare:)] autorelease]; 
    [youDictionaryArray sortUsingDescriptors:[NSArray arrayWithObjects:dateSortDescriptor, nil]]; 

和/或NSPredicate只得到一些ID:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(issue_id == %i)", 2]; 
    NSArray *newArray = [youDictionaryArray filteredArrayUsingPredicate:predicate]; 
0

有几种方法。您可以使用NSPredicate并使用NSArray方法-filteredArrayUsingPredicate:。或者在iOS 4上使用过滤块:-indexesOfObjectsPassingTest:然后使用-objectsAtIndexes:获取对象。

否则最好是你刚刚通过数组循环和过滤你需要的产品进入一个新问题:

// Given a NSArray *items 
NSMutableArray *filteredItems = [NSMutableArray array]; 
for (NSDictionary *item in items) { 
    if (/* your condition */) { 
    [filteredItems addObject: item]; 
    } 
}