NSManagedObjects を持つ 2 つの NSSets があります。各セットのオブジェクトは異なるスレッドでフェッチされます。つまり、一致する objectID を持つものもありますが、オブジェクト自体は異なります。ここで、あるセットの managedObjects を別のセットから削除したいと考えています。
NSSet* oldObjects;
NSMutableSet* currentObjects;
// I want to remove the managedObjects in oldObjects from currentObjects, all objects in oldObjects are also in currentObjects
// This doesn't work, since the objects don't match
[currentObjects removeObjectsInArray:[oldObjects allObjects]];
// But strangely enough, this doesn't add any objects to currentObjects, but if the objects don't match, shouldn't it?
//[currentObjects addObjectsFromArray:[oldObjects allObjects]];
// This does work for me but this code is running on the main thread and I can see this becoming rather slow for large data sets
NSArray* oldObjectIDs = [[oldObjects allObjects] valueForKey:@"objectID"];
[currentObjects filterUsingPredicate:[NSPredicate predicateWithFormat:@"NOT (objectID IN %@)", oldObjectIDs]];
これらを除外するより速い方法はありますか? この場合でも高速列挙は高速でしょうか?