Я пытаюсь отладить очень гнусную проблему с некоторым кодом кода ядра iPhone.Основные данные: Как сохранить без сохранения?
Установка заключается в следующем: У меня есть поток, который существует для опроса веб-службы и отправлять свои результаты с помощью NSNotification
в основной поток (принят в userDict
, кучу строк и NSNumber
с). Я использую Tim Hatcher's notification library, чтобы перейти к основной теме.
NSDictionary* userDict = [Message userDictFromXML:el];
if (userDict != nil)
{
[[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:@"InsertMessage" object:nil userInfo:userDict];
}
Основной поток получает UserDict, а затем продолжает извлекать ее ценности и вставить их в новый управляемый объект. Все идет нормально.
У меня проблемы с этим, однако, но не сразу. После того, как поток отправил свои результаты в основной поток и сохранит новый объект в контексте, я могу выполнить определенную серию операций (включая NSFetchRequest
и пару назначений отношений), что приводит к EXC_BAD_ACCESS
при попытке доступа одно из свойств выбранного управляемого объекта.
Другое смешное, что я могу решить проблему. Я могу сделать это, поместив один нить [userDict retain]
в поток, прежде чем я поместил его внутри NSNotification
, который будет опубликован в основной поток, который будет сохранен в управляемом объекте. Неважно, если я брандмауэр объекты друг от друга, создав новый NSString
, как только я получу значения в принимающем потоке, он все равно будет сбой без этого retain
.
NSDictionary* userDict = [Message userDictFromXML:el];
if (userDict != nil)
{
[userDict retain]; // NOW THIS WORKS (???)
[[NSNotificationCenter defaultCenter] postNotificationOnMainThreadWithName:@"InsertMessage" object:nil userInfo:userDict];
}
Что дает ???
Уведомления действуют в той же теме, с которой они отправляются, и не пересекают границы резьбы. Учитывая это, вы уверены, что остальная часть вашего кода действительна? – zneak
Забыл пояснить, я использую библиотеку (см. Выше правки), чтобы пройти через границы потоков. Я проверил saveCounts объектов, о которых идет речь, и все кажется ОК. – sehugg
Можете ли вы показать код для своих свойств и когда вы добавляете объекты в ManagedObject? –