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 Zoeken Berichten van vandaag Markeer forums als gelezen
  #1  
Oud 8 August 2009, 10:39
» iPhone 3GS 16GB (Zwart) [FW: 3.0.1]  [Jailbreak: Ja]
» Mac OS X
 
Geregistreerd: 19 March 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 8 August 2009, 15:44
» 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

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 8 August 2009, 16:33
» iPhone 3GS 16GB (Zwart) [FW: 3.0.1]  [Jailbreak: Ja]
» Mac OS X
 
Geregistreerd: 19 March 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 8 August 2009, 16:45
» 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
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; 8 August 2009 om 16:48.
  #5  
Oud 8 August 2009, 18:22
» iPhone 3GS 16GB (Zwart) [FW: 3.0.1]  [Jailbreak: Ja]
» Mac OS X
 
Geregistreerd: 19 March 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 8 August 2009, 18:45
» iPhone 3GS 16GB (Zwart) [FW: 3.0.1]  [Jailbreak: Ja]
» Mac OS X
 
Geregistreerd: 19 March 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 8 August 2009, 22:07
» iPhone 4 32GB (Zwart) [FW: 4.1]  [Jailbreak: Nee]
» Windows
 
Geregistreerd: 25 September 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)

 
Discussietools
Weergave

Soortgelijke discussies

Discussie Auteur Forum Reacties Laatste bericht
Why I can't call any number at all? zhi T-Mobile 4 7 August 2008 11:37
[ZiPhone] Zibree's Unlock/Activate/Jailbreak method for 4.6 112/113 OTB xrister Unlock [archief] 1154 1 March 2008 21:16
Openssh install fails !! dsimons Archief 6 3 February 2008 16:53
Call Ended, Call failed Jellow iPhone algemeen 0 23 December 2007 18:10
Automated method for iPhone 1.1.1 jailbreaking/third-party apps coming soon TJB Archief 8 21 October 2007 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 04:30.