Моя цель состоит в том, чтобы инициализировать большой объем данных в другом (не главном) потоке, а затем обновить UIProgressView
в основном потоке, соответствующем прогрессу большой загрузки данных. Для этого я использую performSelectorInBackground
для загрузки данных и обновления прогресса на протяжении всего использования, используя performSelectorOnMainThread
.Настройка данных в фоновом потоке и получение ошибки bad_access
В настоящее время я получаю ошибку EXE_BAD_ACCESS
из одного из словарей, которые я инициализирую, в частности, строки, где я устанавливаю self.someDictionary = @{...}
. self.someDictionary
принимает значения strong
и nonatomic
и инициализируется на основной теме.
Как новичок в многопоточности, я начинаю видеть, что я не должен устанавливать сильное свойство и nonatomic
(однако его изменение до atomic
все равно вызвало сбой). Что еще я делаю неправильно, чтобы вызвать ошибку EXE_BAD_ACCESS
, и как мне установить большой объем данных в NSDictionary в не основной поток и все еще иметь возможность обновлять ход основного потока?
Спасибо!
Edit 1:
Код:
//In viewWillAppear, from the main thread
[self performSelectorInBackground:@selector(populateDictionaries) withObject:nil];
//In populateDictionaries method
Dictionary *someDictionary = [[Dictionary alloc] init];
//the methods inside the Dictionary class
- (id) init{
self = [super init];
if (self){
[self makeDictionaries];
}
return self;
}
- (void)makeDictionaries{
self.insiderDictionary = @{ ...} //this line is causing the crash
}
Пожалуйста, напишите ur код – Mukesh
Спасибо @muku - Я отправил код, который показывает, когда я сначала вызываю 'performSelectorInBackground', и в конечном итоге, какой метод вызывает исключение bad_access. – daspianist
Убедитесь, что код ur работает в одном потоке –