Object uit NSArray tweemaal gebruiken discussie in Ontwikkelen voor iOS forum; ( verdwijnt na registratie ) Ik hoop dat iemand mij kan helpen met het volgende probleem. Ik heb een array waarin ik allerlei images opsla. Nu wil ik elke image ...
|
Registreer | FAQ | Ledenlijst | Kalender | Berichten van vandaag | Zoeken |
#1
|
|||
|
|||
Object uit NSArray tweemaal gebruiken
Ik hoop dat iemand mij kan helpen met het volgende probleem.
Ik heb een array waarin ik allerlei images opsla. Nu wil ik elke image in die array 2 x gebruiken. Wat er dan gebeurd is dat de eerste image verdwijnt als ik de tweede image plaats. Dit wordt volgens mij veroorzaakt omdat ik beide keer naar de zelfde referentie in het geheugen wijs en de image dus niet op 2 plekken te gelijk gezet kan worden. Maar wanneer ik copy gebruik crasht de app en krijg ik de melding dat ik method copyWithZone niet te gebruiken is. Ook dat heb ik opgezocht en dat schijnt dus te komen omdat elke image in die array een custom class is. Iemand een idee hoe ik dit op kan lossen? |
|
|
Gesponsorde links (verdwijnt na registratie)
|
#2
|
|||
|
|||
Klinkt vreemt, maar als ik het goed begrijp wil je dus een en het zelfde plaatje twee keer toevoegen aan een array.
Dit zou mijn inziens gewoon moeten kunnen, maar misschien dat NSArray een pointer check doet. Zou je code eens kunnen posten, dan wordt het na bouwen en test een stukje makkelijker. Misschien is er wel een weg om heen. |
#3
|
|||
|
|||
Citaat:
Hieronder het stukje code waar het over gaat: NSArray *thumbs = [arrayThumbnails objectAtIndex:indexPath.section]; if([[thumbs objectAtIndex:indexPath.row] isKindOfClass:[AsyncImageView class]]) { AsyncImageView *imaget = (AsyncImageView *)[[thumbs objectAtIndex:indexPath.row] copy]; [self showDetailViewWithInfonEvent withImage:imaget]; } else { [self showDetailViewWithInfonEvent withImage:nil]; } Ik hoop dat dit een stuk ophelderd! |
#4
|
|||
|
|||
Je hoeft geen copy te gebruiken, ja kan direct the image gebruiken.
Ik heb het idee dat je ergens de array op ruimt en de image released waardoor deze wordt opgeruimt, of dat je de pointer overschrijft met de twee image als je die gaat displayen. Je code ziet er goed uit, in de functie showDetailViewWithInfo withImage, retain je daar de image (of in de viewcontroller/view die daar dan weer aan hangt?) |
#5
|
|||
|
|||
TUX2K als hij een retain vergeten is zou het image gewoon te zien moeten zijn. Hij wordt pas opgeruimd als de retaincount op 0 staat. stel het wordt ergens vergeten en de retaincount staat op 1, kan je hem nog steeds op 10 plekken gebruiken, alleen weet het systeem niet waar hij allemaal gebruikt wordt.
Lijkt mij eerder dat er iets misgaat bij een draw functie ofzo die de vorige image overschrijft met een lege image of iets in die richting. Misschien is het mogelijk wat meer code te plaatsen?
__________________
Software Engineer iPhone Developer |
#6
|
|||
|
|||
Ik zal even de code posten die hiermee te maken heeft:
Bij de initialisatie van de app tel ik alle table cell's en groepeer ze in categorieën en zet hier allemaal lege objecten voor in de plaats in een mutable array. (arrayThumbnails) Wanneer de data wordt geladen van elke cell en deze cell een afbeelding heeft, plaats ik deze afbeelding in die array door het lege object te vervangen.(uiteraard op de goede plek) AsyncImageView *asyncImage = [[AsyncImageView alloc] initWithFrame:CGRectMake(12.0f, 13.0f, 72.0f, 72.0f)]; asyncImage.tag = 500; [asyncImage loadImageFromURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@", onEvent.event_thumb]]]; [cell.contentView addSubview:asyncImage]; lijstItems = [arrayThumbnails objectAtIndex:indexPath.section]; [lijstItems replaceObjectAtIndex:indexPath.row withObject:asyncImage]; [arrayThumbnails replaceObjectAtIndex:indexPath.section withObject:lijstItems]; [asyncImage release] Zo wordt dus mijn array opgevuld met afbeeldingen. (Zorgt voor het soepeler scrollen) Daarna wil ik dus de image laten zien in de cell, dat doe ik alsvolgt: lijstItems = [arrayThumbnails objectAtIndex:indexPath.section]; [cell.contentView addSubview:[lijstItems objectAtIndex:indexPath.row]]; Maar nu komt het volgende het 'probleem', als er nu een cell wordt geselecteerd dan komt er een nieuwe view tevoorschijn (met meer informatie dan in die cell) maar wil ik weer datzelfde plaatje daarin laten zien. Maar als ik dan het plaatje opdezelfde manier ophaal, verdwijnt het plaatje dat in de cell stond. Ik hoop dat ik het nu een beetje duidelijk heb kunnen maken. Misschien dat jullie zien wat ik fout doe? |
#7
|
|||
|
|||
Er valt me wel op dat in de code gebruik wordt gemaakt van NSArray en in de tekst je spreekt van een mutable array maar volgens mijn zit daar het probleem niet. Het lijkt er inderdaad op dat er sprake is van een memorymanagementvraagstuk, zeker omdat je het plaatje in een nieuwe view gebruikt. Maak anders een property aan op de subview van het type array waar je de thumbs array aan toewijst. Door met synthesize de property aan te maken is het memorymgt automatisch geregeld.
|
Labels |
array, image, probleem |
Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten) |
|
Soortgelijke discussies |
||||
Discussie | Auteur | Forum | Reacties | Laatste bericht |
Object in koptelefoonaansluiting | Sluuz | iPhone algemeen | 6 | 15-05-12 21:57 |
Iphone 4 uit VS te gebruiken in NL? | hans-wouter | iPhone algemeen | 1 | 19-08-10 22:20 |
Op zoek naar bepaald UI object | Coppes | Ontwikkelen voor iOS | 2 | 07-01-10 15:48 |
|
|