Предупреждение. Поскольку NSManagedObject isEqual сравнивает идентификаторы объектов, сравнение может завершиться ошибкой, если один экземпляр использует временный идентификатор объекта, а другой экземпляр использует постоянный идентификатор объекта.
Фон: при создании объекта NSManagedObject ему назначаетсявременный objectID.Он преобразуется в постоянный objectID, когда NSManagedObject фактически сохраняется в хранилище.Вы можете увидеть разницу, если напечатаете objectID:
x-coredata: /// MyEntity / t03BF9735-A005-4ED9-96BA-462BD65FA25F118 (временный идентификатор)
x-coredata: // EB8922D9-DC06-4256-A21B-DFFD47D7E6DA / MyEntity / p3 (постоянный идентификатор)
Когда objectID преобразуется в постоянный, экземпляры NSManagedObject в других потоках и коллекциях не обновляются.Таким образом, если вы поместите NSManagedObject в NSArray, когда у него есть временный objectID, использование таких методов, как containsObject, завершится неудачно, если вы попытаетесь найти объект с постоянным objectID.Помните, что containsObject использует isEqual.
Наконец, пара полезных методов - NSManagedObjectID isTevenID и NSManagedObjectContext receivePermanentIDsForObjects: error:.