touchesBegan EXC_BAD_ACCESS

touchesBegan EXC_BAD_ACCESS discussie in Ontwikkelen voor iOS forum; ( verdwijnt na registratie ) Heren, Ik zit met een klein "bugje" en heb even geen idee hoe ik het kan oplossen. In de volgende code: Code: -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent ...



Ga terug   iPhone, iPod touch, iPad en Apple TV forum > Development > Ontwikkelen voor iOS
Wachtwoord vergeten? Registreren!
Registreer FAQ Ledenlijst Kalender Zoeken Berichten van vandaag Markeer forums als gelezen
  #1  
Oud 22 July 2009, 13:12
» iPhone 4 32GB (Zwart) [FW: 6.0]  [Jailbreak: Nee]
» iPad 3 Wi-Fi +4G 32GB (Zwart) [FW: 6.0]  [Jailbreak: Nee]
» Windows
 
Geregistreerd: 14 July 2008
Berichten: 49
Standaard touchesBegan EXC_BAD_ACCESS

Heren,

Ik zit met een klein "bugje" en heb even geen idee hoe ik het kan oplossen.

In de volgende code:

Code:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchposition = [touch locationInView:self.view];
    for (UIImageView *mView in imageArray) {
        CGRect rect = [mView frame];
    }
}
Dit gaat een aantal keren goed 2x. vervolgen krijg ik een EXC_BAD_ACCESS error op de CGRect rect = [mView frame].... en ik weet dus niet waarom
imageArray is een NSMutableArray en init met retain.

Iemand een idee waar dit aan kan liggen? Ik weet ook niet precies hoe ik meer informatie uit me debugger kan krijgen.
Advertentie
Advertentie Gesponsorde links (verdwijnt na registratie)

  #2  
Oud 22 July 2009, 13:41
» iPhone 3GS 32GB (Zwart) [FW: 5.0 Beta]  [Jailbreak: Nee]
» iPad 1 Wi-Fi 16GB [FW: 5.0 Beta]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 21 August 2008
Locatie: Antwerpen
Berichten: 89
Standaard

Je hebt die mView al eens ergens een release message gestuurd waardoor mView nu naar een ongeldige geheugenplaats wijst.

Deze code is wat je in essentie doet:
Code:
UIImageView *imgView = [[UIImageView alloc] init];
[imgView release];
CGRect rect = [imgView frame];       // Oeps... EXC_BAD_ACCESS
  #3  
Oud 22 July 2009, 13:45
» iPhone 3GS 32GB (Zwart) [FW: 5.0 Beta]  [Jailbreak: Nee]
» iPad 1 Wi-Fi 16GB [FW: 5.0 Beta]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 21 August 2008
Locatie: Antwerpen
Berichten: 89
Standaard

Citaat:
Oorspronkelijk geplaatst door Rockafello Bekijk bericht
imageArray is een NSMutableArray en init met retain.
init met retain... klinkt vreemd...
  #4  
Oud 22 July 2009, 13:54
» iPhone 4 32GB (Zwart) [FW: 6.0]  [Jailbreak: Nee]
» iPad 3 Wi-Fi +4G 32GB (Zwart) [FW: 6.0]  [Jailbreak: Nee]
» Windows
 
Geregistreerd: 14 July 2008
Berichten: 49
Standaard

Code:
NSMutableArray *imageArrey = [[[NSMutableArray alloc] init] retain];
retain schijnt ervoor te zijn, dat de array ook buiten een functie beschikbaar is...??


Ahh fout zat heel ergens anders.....had wel te maken met de ImageView en die release ik...oops.

ff naar de markt en loempia halen helpt vaak met dit soort problemen. ff weglopen van je probleem.

Als .NET/java progger heb je niet zoveel te doen met pointers
  #5  
Oud 22 July 2009, 14:15
» iPhone 3GS 32GB (Zwart) [FW: 5.0 Beta]  [Jailbreak: Nee]
» iPad 1 Wi-Fi 16GB [FW: 5.0 Beta]  [Jailbreak: Nee]
» Mac OS X
 
Geregistreerd: 21 August 2008
Locatie: Antwerpen
Berichten: 89
Standaard

Citaat:
Oorspronkelijk geplaatst door Rockafello Bekijk bericht
Code:
NSMutableArray *imageArrey = [[[NSMutableArray alloc] init] retain];
retain schijnt ervoor te zijn, dat de array ook buiten een functie beschikbaar is...??
Je kan het beter als volgt doen, voor zover dit overeenkomt met wat je wil doen uiteraard,...
Code:
- (NSMutableArray *)doeIetsEnGeefArrayTerug1 {
        // Eerste mogelijkheid
	NSMutableArray *array = [[NSMutableArray alloc] init];
	// doe iets
	return [array autorelease];
}

- (NSMutableArray *)doeIetsEnGeefArrayTerug2 {
        // Tweede mogelijkheid
	NSMutableArray *array = [[[NSMutableArray alloc] init] autorelease];
	// doe iets
	return array;
}

- (void)eenAndereMethode {
	NSMutableArray *array = [[self doeIetsEnGeefArrayTerug1] retain];
	//blablabla
        [array release];
}
Dankzij de autorelease heeft eenAndereMethode tijd om de reference count te verhogen, terwijl doeIetsEnGeefArrayTerug mooi het eigen gealloceerde geheugen opkuist (lees: reference count verlagen).
De methodes 1 en 2 zijn als ik me niet vergis gelijkwaardig.

Edit:
was vergeten een release te doen in eenAndereMethode en een init in doeIetsEnGeefArrayTerug2

Waarom dit beter is: in jouw implementatie ga je er van uit dat er zeker en vast nog ergens een functie is die een release op die imageArray doet. In mijn oplossing maakt het niet uit of die eenAndereMethode bestaat of niet, het geheugen is steeds mooi opgekuist.

Laatst gewijzigd door Matisse; 22 July 2009 om 14:23.
  #6  
Oud 22 July 2009, 14:38
» iPhone 4 32GB (Zwart) [FW: 6.0]  [Jailbreak: Nee]
» iPad 3 Wi-Fi +4G 32GB (Zwart) [FW: 6.0]  [Jailbreak: Nee]
» Windows
 
Geregistreerd: 14 July 2008
Berichten: 49
Standaard

Duidelijk verhaal! Thnx voor de hulp zover

Voor mijn oplossing werkt mijn versie ook, aangezien ik in het array een spelboard bewaar van een vast aantal ImageViews. in de dealloc release ik hem weer.

Het is ff doorbijten, maar begin het nu leuk te vinden te proggen voor iPhone!! Als dit projectje af is, maar eens verdiepen in Core Animations.
Reageren


Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten)

 
Discussietools
Weergave

Regels voor berichten
Je mag geen nieuwe discussies starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit
Trackbacks are Aan
Pingbacks are Aan
Refbacks are Uit



Alle tijden zijn GMT +2. Het is nu 09:56.