Mein Ziel ist es, eine große Menge an Daten auf einem anderen (Nicht-Haupt) -Thread zu initialisieren, und aktualisieren Sie dann eine UIProgressView
auf dem Hauptthread entsprechend dem Fortschritt der großen Daten laden. Um dies zu tun, verwende ich performSelectorInBackground
, um die Daten zu laden, und den Fortschritt auf dem ganzen Weg mit performSelectorOnMainThread
zu aktualisieren.Festlegen von Daten im Hintergrund Thread und Erhalten bad_access Fehler
Ich bekomme derzeit einen EXE_BAD_ACCESS
Fehler von einem der Wörterbücher, die ich initialisiere, speziell die Zeile, wo ich self.someDictionary = @{...}
setze. self.someDictionary
übernimmt die Eigenschaften strong
und nonatomic
und wird im Nicht-Haupt-Thread initialisiert.
Als insgesamt Neuling auf Multithreading, beginne ich zu sehen, dass ich nicht eine starke und nonatomic
Eigenschaft festlegen sollte (es jedoch zu atomic
noch verursachte den Absturz zu ändern). Was mache ich sonst noch falsch, um den EXE_BAD_ACCESS
Fehler zu verursachen, und wie stelle ich eine große Menge von Daten zu einem NSDictionary auf einem Nicht-Hauptthread ein und bin immer noch in der Lage, den Fortschritt im Hauptthread zu aktualisieren?
Danke!
Edit 1:
Code:
//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
}
bitte post ur Code – Mukesh
Dank @muku - Ich postete den Code, der zeigt, wenn ich das 'performSelectorInBackground' aufrufen, und schließlich welche Methode die bad_access Ausnahme verursacht. – daspianist
Stellen Sie sicher, dass Ur-Code in Einzel-Thread funktioniert –