//

3x method call fails

3x method call fails discussie in Ontwikkelen voor iOS forum; ( verdwijnt na registratie ) Ik ben nieuw in de Objective-C-wereld, vandaar dat ik ook tegen een klein maar vervelend probleem ben aangelopen. Ik heb de volgende functie gemaakt: Code: ...



Ga terug   iPhone, iPod touch, iPad en Apple TV forum > Development > Ontwikkelen voor iOS
Wachtwoord vergeten? Registreren!
Registreer FAQ Ledenlijst Kalender Berichten van vandaag

Reageren

 

Discussietools Weergave
  #1  
Oud 08-08-09, 10:39
michiel3 michiel3 is offline
• iOS 3.0.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Mar 2008
Berichten: 39
Standaard 3x method call fails

Ik ben nieuw in de Objective-C-wereld, vandaar dat ik ook tegen een klein maar vervelend probleem ben aangelopen.

Ik heb de volgende functie gemaakt:
Code:
- (NSString*) test:(NSString *)str {
	NSLog(str);
	
	return str;
}
De functie vraagt om een string, drukt deze af in de console met NSLog en retourneert deze vervolgens weer. Van oorsprong was het een functie die ascii naar hexadecimaal omzette. Omdat ik tegen het probleem aan liep heb ik het geprobeerd met een simpelere functie.

Ik roep het volgende aan:
Code:
NSString *string1 = [self test:@"test1"];
NSString *string2 = [self test:@"test2"];
NSString *string3 = [self test:@"test3"];
Ik maak hier drie strings door ze door die functie te halen. Bij mijn weten zouden ze alle drie moeten worden afgedrukt via NSLog(). Het compileren gaat goed, maar bij het debuggen in de simulator stopt de debugger er gewoon mee en loopt het programma vast.

Als ik de derde call weghaal, dus alleen string1 en string2, dan krijg ik netjes 'test1' en 'test2' in m'n console.

Het volgende werkt ook:
Code:
[self test:@"test1"];
[self test:@"test2"];
[self test:@"test3"];
Iemand enig idee wat ik verkeerd doe? Zal wel een stom foutje zijn.
Advertentie
Advertentie Gesponsorde links (verdwijnt na registratie)

  #2  
Oud 08-08-09, 15:44
Rockafello Rockafello is offline
• iOS 6.0
• 6.0
• Besturingssysteem: Windows
 
Geregistreerd: Jul 2008
Berichten: 49
Standaard

Probeer het eens op deze manier:

Code:
NSString *string1 = [[self test:@"test1"] retain];
de retain zorgt ervoor dat de variabele ook buiten je functie nog gebruikt kan worden.

overigens vind ik de manier waarop je dit doet niet heel erg mooi.
  #3  
Oud 08-08-09, 16:33
michiel3 michiel3 is offline
• iOS 3.0.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Mar 2008
Berichten: 39
Standaard

Dat werkt ook niet, helaas. Overigens werkt het met twee strings dan ook niet meer...

Het zal ongetwijfeld slordig zijn, ben slechts in den beginne. Heb je tips?
  #4  
Oud 08-08-09, 16:45
Rockafello Rockafello is offline
• iOS 6.0
• 6.0
• Besturingssysteem: Windows
 
Geregistreerd: Jul 2008
Berichten: 49
Arrow

Code:
-(void) init {
   NSString *string1 = [[NSString stringWithFormat:@"test1"] retain];
   NSString *string2 = [[NSString stringWithFormat:@"test2"] retain];
   NSString *string3 = [[NSString stringWithFormat:@"test3"] retain];

   [self test:string1];
   [self test:string2];
   [self test:string3];
}


-(void) test:NSString *)str {
    NSLog(str);
}
En op deze manier?

ben overigens ook nog niet zo lang bezig met objective-c. maar het is wel leuk om ff uit te zoeken

Laatst gewijzigd door Rockafello; 08-08-09 om 16:48.
  #5  
Oud 08-08-09, 18:22
michiel3 michiel3 is offline
• iOS 3.0.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Mar 2008
Berichten: 39
Standaard

Dat werkt dan weer wel. Maar dat is niet helemaal wat ik zoek. Het voorbeeld wat ik gaf is misschien wat raar, maar het was de bedoeling dat het hiervoor ging werken:

Code:
- (id) hexValue:(NSData *)data {
    NSMutableString *hex = [NSMutableString string];
    
    unsigned char *bytes = (unsigned char *)[data bytes];
    char temp[3];
    
    int i = 0;
    for (i = 0; i < [data length]; i++) {
        temp[0] = temp[1] = temp[2] = 0;
        (void)sprintf(temp, "%02x", bytes[i]);
        [hex appendString:[NSString stringWithUTF8String: temp]];
    }
    
    return hex;
}
Deze functie zet een NSData om naar hex en retourneert daarvan een string.

Ik roep de methode als volgt aan in een void-method (actie achter een click event op een UIButton):
Code:
NSString* test = [self hexValue:[@"Test" dataUsingEncoding:NSUTF8StringEncoding]];
NSLog(test);
Dit drukt de hexwaarde van de string Test af. Als ik dan nog een tweede string maak en ook af druk, dan gaat het mis en blijft het programma hangen en stopt de debugger. Dus dit gaat al mis:

Code:
NSString* test = [self hexValue:[@"Test" dataUsingEncoding:NSUTF8StringEncoding]];
NSLog(test);
NSString* test2 = [self hexValue:[@"Test" dataUsingEncoding:NSUTF8StringEncoding]];
NSLog(test2);
Het vreemde is als ik een stukje code daarboven weghaal, dan lukt het me wel om test en test2 af te drukken met NSLog(). Het stuk code dat ik weghaal d.m.v. comments is als volgt (en zal ongetwijfeld wat slordig zijn):

Code:
NSArray *charset;
NSArray *years;
            
charset = [NSArray arrayWithObjects:    @"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",
                                            @"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",
                                            @"K",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",
                                            @"U",@"V",@"W",@"X",@"Y",@"Z"];
    
years = [NSArray arrayWithObjects:    @"2006"];
    
NSMutableArray *weeks = [self getWeekNumbers];
Iets te maken met memory o.i.d.?
  #6  
Oud 08-08-09, 18:45
michiel3 michiel3 is offline
• iOS 3.0.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Mar 2008
Berichten: 39
Standaard

Lol! Ik heb de oplossing gevonden, ik had in de array het laatste item niet aangegeven door nil mee te geven!

Vreemd dat hij dan nog wel doorgaat en pas na een hoopje code stopt met werken...

Anyways, toch bedankt voor de hulp!
  #7  
Oud 08-08-09, 22:07
gekkepietje gekkepietje is offline
• iOS 4.1
• Besturingssysteem: Windows
 
Geregistreerd: Sep 2008
Berichten: 153
Standaard

Citaat:
Oorspronkelijk geplaatst door michiel3 Bekijk bericht
Vreemd dat hij dan nog wel doorgaat en pas na een hoopje code stopt met werken...
Dat is altijd zo met C-achtige talen. Doe je iets fout dan krijg je rare crashes.
Reageren



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

 

Soortgelijke discussies

Discussie Auteur Forum Reacties Laatste bericht
Why I can't call any number at all? zhi Odido (T-Mobile) 4 07-08-08 11:37
[ZiPhone] Zibree's Unlock/Activate/Jailbreak method for 4.6 112/113 OTB xrister Unlock [archief] 1154 01-03-08 21:16
Openssh install fails !! dsimons Archief 6 03-02-08 16:53
Call Ended, Call failed Jellow iPhone algemeen 0 23-12-07 18:10
Automated method for iPhone 1.1.1 jailbreaking/third-party apps coming soon TJB Archief 8 21-10-07 21:18

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 18:17.