Не думаю, что вы понимаете, как работает CD. Вы не можете отсоединить объект от CoreData, CD является резервным хранилищем для объекта.
Я также вполне уверен, что проблемы, с которыми вы сталкиваетесь, не связаны с кодом, который вы включили выше, потому что даже в первом случае в вашем коде нет ничего, что могло бы зафиксировать изменения в постоянном хранилище. При отсутствии вызова NSManagedObjectContext:save:
все изменения в вашем графе объектов будут временными.
Другими словами, для того, чтобы делать то, что вы хотите (настраивать, не сохраняя), просто не вызывайте save:
в контексте, в котором находится объект, после того, как вы его настроите. Если вам нужно сохранить другие изменения, вы можете либо явно откатить настройки перед сохранением, либо вы можете обернуть измененные объекты в их собственный контекст, прежде чем поиграться с ними:
NSManagedObjectContext *tweakingContext = [[NSManagedObjectContext alloc] init];
tweakingContext.persistentStoreCoordinator = person.managedObjectContext.persistentStoreCoordinator;
PersonObj *tweakablePerson = [tweakingContext objectWithID:person.managedObjectID];
//Do your stuff
[tweakingContext release];
Приведенный выше код предоставит вам новый объект (tweakablePerson), в котором обнаружены ошибки из тех же данных, что и персона, но в независимом контексте вы никогда не сохраните. Если вы когда-нибудь захотите сохранить его, вы можете, но вам придется решать другие проблемы (потенциальные конфликты сохранения, если произошли другие сохранения).
Опять же, хотя это отвечает на вопрос, который вы задаете, я не думаю, что это решит вашу проблему, потому что проблема почти наверняка не в коде выборки или создания объекта (который вы показываете), а в коде сохранения, который Вы не перечислены.