Problemen met class discussie in Ontwikkelen voor iOS forum; ( verdwijnt na registratie ) Hallo, Ik ben al een tijdje bezig met een app waarin gebruik wordt gemaakt van een XML Parser. Het ontwikkelen doe ik in fases, dus ...
|
Registreer | FAQ | Ledenlijst | Kalender | Berichten van vandaag | Zoeken |
#1
|
|||
|
|||
Problemen met class
Hallo,
Ik ben al een tijdje bezig met een app waarin gebruik wordt gemaakt van een XML Parser. Het ontwikkelen doe ik in fases, dus ik verbeter de app stukje bij beetje. Nu ben ik bezig om het asynchronous laden van de xml bestanden van het internet te implementeren (ipv synchronous). Hiervoor gebruik ik ASIHTTPRequest. De XMLParser zit verwerkt in een subclass van NSObject, en bevat de NSXMLParserDelegate methods. Nu in deze XML Parser class heb ik de volgende functie staan om het parsen af te handelen (verder staan er nog delegate methods in): Code:
-(id) loadXMLByArray:(NSArray *)urlArray { NSLog(@"first call to XML Parser"); if(self.arrayOfObjects){ [arrayOfObjects removeAllObjects]; arrayOfObjects = nil; [arrayOfObjects release]; } if(!self.arrayOfObjects){ arrayOfObjects = [[NSMutableArray alloc] init]; } if(context == nil){ context = [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; } NSEntityDescription *entity = [NSEntityDescription entityForName:@"ObjectInfo" inManagedObjectContext:context]; for (NSString *urlString in urlArray){ NSLog(@"HOI"); NSURL *url = [[NSURL alloc] initWithString:urlString]; __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request setCompletionBlock:^{ // Use when fetching binary data NSData *responseData = [request responseData]; NSXMLParser *parser = [[NSXMLParser alloc] initWithData:responseData]; [parser setDelegate:self]; [parser setShouldProcessNamespaces:NO]; // We don't care about namespaces [parser setShouldReportNamespacePrefixes:NO]; // [parser setShouldResolveExternalEntities:NO]; [parser parse]; [url release]; [parser release]; if([self.arrayOfObjects count] != 0){ for(Object *object in self.arrayOfObjects){ ObjectInfo *objectInfo = [[ObjectInfo alloc] initWithEntity:entity insertIntoManagedObjectContext:context]; objectInfo.ObjectContent = object.content; objectInfo.ObjectDate = object.dateCreated; objectInfo.ObjectUsername = object.userName; objectInfo.ObjectSortDate = object.sortDate; NSURL *url = [NSURL URLWithString:object.urlToImage]; NSData *data = [[NSData alloc] initWithContentsOfURL:url]; UIImage *uiImage = [UIImage imageWithData:data]; [data release]; NSData * imageData = UIImagePNGRepresentation(uiImage); objectInfo.ObjectImage = imageData; MyAppDelegate *theDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate]; [theDelegate saveContext]; [objectInfo release]; } } [self.arrayOfObjects removeAllObjects]; }]; [request setFailedBlock:^{ NSError *error = [request error]; NSLog(@"Error during asynchronous request (ASIHTTPRequest): %@",error); }]; [request startAsynchronous]; } RootViewController *rVC = [[RootViewController alloc] init]; [rVC finishFetch]; } Code:
NSArray *arrayWithURLs = [NSArray arrayWithObjects:@"http://somedomain.com/somefeed.xml", @"http://somedomain.com/somesecondfeed", nil]; XMLParser *xmlParser = [[XMLParser alloc] init]; [xmlParser loadXMLByArray:arrayWithURLs]; |
|
|
Gesponsorde links (verdwijnt na registratie)
|
#2
|
|||
|
|||
Opgelost . Toelichting:
Aan het einde van de "loadXMLByArray" functie wordt RootViewController allocated en initialized, terwijl deze al in het geheugen stond. Verder werd de functie "loadXMLByArray" aangeroepen vanuit de viewDidLoad method in de RootViewController class. Door het opnieuw allocaten en initalizen van RootViewController wordt de viewDidLoad method opnieuw geroepen, waardoor "loadXMLByArray" ook opnieuw wordt geroepen. Dit bleef zo doorgaan en resulteert dus in een loop. De oplossing die ik heb geimplementeerd is gebruik van NSNotificationCenter om zo de functie "finishFetch" in RootViewController op te roepen. |
#3
|
||||
|
||||
Slotje dan maar.
__________________
We are one, but we are not the same... Talk to each other! |
Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten) |
|
Soortgelijke discussies |
||||
Discussie | Auteur | Forum | Reacties | Laatste bericht |
Variabele uit andere class halen | DJ14 | Ontwikkelen voor iOS | 5 | 05-04-11 11:28 |
flash class 0 sms verstutren via de Iphone? | manga | Jailbreak apps en thema's | 9 | 21-10-09 16:11 |
UILabel updaten vanuit andere class | Niels2678 | Ontwikkelen voor iOS | 18 | 05-10-09 12:42 |
Dynamic Class Loading | markvwijnen | Ontwikkelen voor iOS | 2 | 16-08-09 21:17 |
|
|