Я пытаюсь использовать базовые данные во много потоке путь. Я просто хочу показать приложение с ранее загруженными данными при загрузке новых данных в фоне. Это должно позволить пользователю получить доступ к приложению во время процесса обновления.
У меня есть NSURLConnection, которые загружают файл асинхронно с помощью делегата (и показывая прогресс), затем я использую XMLParser, чтобы проанализировать новые данные и создать новый NSManagedObjects в отдельном контексте с его собственным persistentStore и использованием отдельного потока.
Проблема состоит в том, что, создавая новые объекты в том же контексте старого при показе это может броски исключение BAD_INSTRUCTION. Так, я решил использовать отдельный контекст для новых данных, но я не могу выяснить способ переместить все объекты в другой контекст, однажды законченный.
Паоло иначе SlowTree
Вопрос: Как я могу подтвердить рефакторинг, то есть математический идентичный предыдущей версии? Хотелось бы, чтобы там был инструмент, но я также принимаю «основные человеческие алгоритмы» в качестве решений.
Я согласен с CHII, что это потрясающе невозможно. Если вам действительно нужно решить его (вместо того, чтобы написать адаптер для устаревшего кода, создавая новое вещество свободно связанным со старым кодом), вы должны взять особо уход за подклассами, переопределенными методами и т. Д. Написание модулей, которые могут помочь, но Если вы на самом деле не знаете, что должен делать код, как вы можете написать тесты подразделения для него? Вы можете написать только тесты подразделений, чтобы убедиться, что новый код делает то, что вы предполагаете, что старый код сделал.
-121--2425332-Я сделал следующее в проекте с некоторыми огромными классами Бога с необходимостью рефакторинга:
Используйте AOP, чтобы «давить» состояние объекта и параметры в начале вашего метода и в конце. Сбросьте возвращаемое значение тоже.
Затем запишите множество сценариев с кодом, необходимым для меняться, и воспроизвести их, используя свой повторный код.
Это не математическое, это немного тяжело настроить, но после того, как вы получите хороший набор не регрессионных тестов.
Дампер легко настроить с помощью инструмента, такого как xstream.
-121--2425336-Апл-параллельность с основной документацией данных - это место для начала. Прочитайте это действительно внимательно ... Я был укушен много раз у моих недоразумений!
Основные правила:
NSPersistentStoreCoordinator
на программу. Вам не нужны их на поток. nsmanageObjectContext
на поток. nsmanagedObject
на нити в другой поток. -Object
и передайте его другому потоку. Дополнительные правила:
NSMANAGEDOBJECTCONTEXT
S -MergeChangeSfromContextDidsaveNotification:
полезно. Но позвольте мне повторить, пожалуйста, внимательно прочитайте документ! Это действительно стоит!
Я надеюсь, что это поможет всем людям, которые сталкиваются с проблемами при использовании основных данных в многопоточной среде.
Взгляните на «Лучшие песни 2» в документации Apple. С помощью этого кода я принял «красную пилюлю» Матрицы и открыл новый мир, без двойных ошибок и без ошибок. : D
Надеюсь, это поможет.
Паоло
стр. Большое спасибо Yuji, в документации, которую вы описали выше, я нашел этот пример.