Mam obrazy w coredata, które próbuję załadować leniwie dla widoku tabeli. Każda komórka używa obserwatora dla pokrewnej głównej jednostki danych, aby zaktualizować obraz, gdy będzie on dostępny. Odpowiedni kod w jednostce jest następujący:Uzyskiwanie EXC_BAD_ACCESS przy użyciu dispatch_async z Core Data
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// The heavy lifting seems to be during firing of the fault and accessing data,
// so i'm trying to do that in the background thread.
UIImage *i = [UIImage imageWithData:self.imageEntity.data];
// I now need to notify observers that the image is ready on the main thread
dispatch_async(dispatch_get_main_queue(), ^{
[self willChangeValueForKey:@"image"];
image = i;
[self didChangeValueForKey:@"image"];
});
});
Projekt wykorzystuje ARC, nie otrzymuję żadnych błędów kompilatora lub ostrzeżenia, a gdy uruchamiam to niby działa, dopóki nie przewinąć szybko, a potem dostać EXC_BAD_ACCESS na linii, gdy deklaruję i.
Czego mi tu brakuje?
Czy próbowałeś z 'NSZombieEnabled'? – zoul
co się stanie, jeśli nie używasz dispatch_async? wystarczy uruchomić na głównym wątku –
NSZombie nie rzuca dla mnie dodatkowego światła. Jeśli nie dokonam dispatch_async, zablokuje on główny wątek i przewinie się naprawdę słabo. – dizy