編輯:更好的例子...合併一個NSArray成的NSSet和避免對iphone在Objective-C複製
所以我有「現有」對象的的NSMutableSet,我想下載JSON數據,解析它,並將這些新對象與我現有的對象合併,使用新下載的對象更新任何重複對象。下面是現有的一組對象的樣子:
NSArray *savedObjects = [NSArray arrayWithObjects:
[NSDictionary dictionaryWithObjectsAndKeys:@"1", @"id", @"hello there", @"body", @"200", @"score", nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"2", @"id", @"hey now", @"body", @"10", @"score", nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"3", @"id", @"welcome!", @"body", @"123", @"score", nil],
nil
];
self.objects = [NSMutableSet setWithArray:savedObjects];
// after downloading and parsing JSON... I have an example array of objects like this:
NSArray *newObjects = [NSArray arrayWithObjects:
[NSDictionary dictionaryWithObjectsAndKeys:@"1", @"id", @"hello there", @"body", @"9999", @"score", nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"4", @"id", @"what's new", @"body", @"22", @"score", nil],
nil
];
因此,例如,合併這個新的對象之後,ID爲1的對象將現在的9999分和ID爲4的新對象將被添加到集合。
我真的想避免循環每個新對象的NSMutableSet只是爲了檢查@「id」屬性存在......我想我可以使用addObjectsFromArray來合併這些新的對象,但它看起來像是因爲屬性不同(例如:分數:9999)它不會將新對象看作集合中的現有對象。
我使用的數字作爲字符串來簡化這個例子。我也想避免使用僅適用於iOS SDK 4.0的功能,因爲該應用將與3.0兼容。
謝謝!我很感激!
爲什麼要構建一個NSArray並立即轉換是一個NSSet中?您應該直接爲保存的對象使用'[NSSet setWithObjects:...]'。 – 2010-10-28 22:43:15
哦,好吧,我想我不得不因爲他們以前也是JSON。 setWithObjects在傳遞數組時是否工作?謝謝。 – taber 2010-10-28 22:53:39
'+ [NSSet中setWithObjects:]'工作就像'+ [NSArray的arrayWithObjects:]'不同之處在於它返回一個集而不是陣列。 – 2010-10-29 01:01:35