[Objective-C] Variabele binnen classe

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • ZpAz
  • Registratie: September 2005
  • Laatst online: 15:23
Ik ben nog maar net begonnen met Objective-C, en ik zit momenteel op een punt vast, wat vast erg simpel is, maar na de documentatie te hebben gelezen en diverse dingen geprobeerd te hebben als google afgesneupt te hebben, ik kom er niet uit.

Wat ik wil is erg simpel, ik wil een variabele in de classe hebben die vanuit de diverse methodes zijn aan te roepen (in mijn geval is het een NSMutableArray maar dat terzijde).

Momenteel heb ik ongeveer dit:

code:
1
2
3
4
5
6
7
@interface mijnKlasse {
    NSMutableArray *mijnArray
}

@property (retain) NSMutableArray *mijnArray

@end

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#import "mijnKlasse.h"

@implamentation mijnKlasse 
@synthesize mijnArray;

- (void) init {
    mijnArray = [[NSMutableArray alloc] init];
    //doe je ding met array
    //Log totaale lengte array (waarde 1) er zit dus wat in
    NSLog(@"Lengte: %d", [mijnArray count]);
}

- (void) eenAndreMethod {
    //Log totale lengte array (null), hij bestaat niet
    NSLog(@"Lengte: %d", [mijnArray count]);
}

@end


Ik heb het met de propertys en zonder geprobeerd, zelf een getter geschreven, maar het baat allemaal niet.

Hoe kan ik er voor zorgen dat ik mijn variabele ook vanuit een andere method kan aanspreken? :) (zonder hem als parameter ofzo mee te geven he ;) )

Tweakers Time Machine Browser Extension | Chrome : Firefox


Acties:
  • 0 Henk 'm!

  • pickboy
  • Registratie: Februari 2006
  • Laatst online: 20-09 21:50
Een waarde aangemaakt in een functie, zal ook weer verdwijnen zodra de functie is afgelopen.

Je kunt hen natuurlijk altijd als globale variabele definieren in de betreffende klasse.

Acties:
  • 0 Henk 'm!

  • ZpAz
  • Registratie: September 2005
  • Laatst online: 15:23
Die waarde staat toch helemaal niet in de method? Hij word daar alleen 'geactiveerd'. De variabele zelf staat er buiten (zie de eerste blok code (header file)).

[ Voor 32% gewijzigd door ZpAz op 22-04-2009 15:58 ]

Tweakers Time Machine Browser Extension | Chrome : Firefox


Acties:
  • 0 Henk 'm!

  • ZpAz
  • Registratie: September 2005
  • Laatst online: 15:23
Zo'n ogenschijnlijke simpele vraag, en niemand die het antwoord weet? :'(

Tweakers Time Machine Browser Extension | Chrome : Firefox


Acties:
  • 0 Henk 'm!

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 26-07 22:25
Kan het helaas niet zelf eventjes proberen, maar moet je niet gewoon self.mijnArray gebruiken?

[ Voor 6% gewijzigd door ^Mo^ op 23-04-2009 19:12 ]

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Acties:
  • 0 Henk 'm!

  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

Moet het return type van je init niet 'id' zijn? (ik neem even aan dat implamentation een tiepvoud is)

Skill is when luck becomes a habit.


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Plak eens de code die je echt hebt, want aan deze code moet haast wel iets niet kloppen (typos enzo). Ik heb net een class gemaakt die ongeveer hetzelfde doet en die werkt prima:

C: TestClass.h
1
2
3
4
5
6
7
8
9
10
11
#import <Cocoa/Cocoa.h>

@interface TestClass : NSObject {
    NSMutableArray* myArray;
}

@property (retain) NSMutableArray* myArray;

- (void) printCount;

@end


C: TestClass.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#import "TestClass.h"

@implementation TestClass

@synthesize myArray;

- (id) init {
    if(self = [super init] ) {
        myArray = [[NSMutableArray alloc] init];
        [myArray addObject:@"Some object"];
        NSLog(@"Number of items: %i", [myArray count]);
    }
    
    return self;
}

- (void) printCount {
    NSLog(@"Number of items: %i", [myArray count]);
}

- (void) dealloc {
    [myArray release];
    [super dealloc];
}

@end


C: main.m
1
2
3
4
5
6
7
8
9
#import <Cocoa/Cocoa.h>
#import "TestClass.h"

int main(int argc, char *argv[])
{
    TestClass* test = [[TestClass alloc] init]; 
    [test printCount];  
    [test release];
}


Op wat memory management issues na hetzelfde, maar jouw code kan er hooguit toe leiden dat je een lek krijgt. De array moet er nog steeds wel zijn. Overigens is die property eigenlijk nergens voor nodig, die gebruik je namelijk helemaal niet omdat je direct de ivar aanspreekt.

De output:
[Session started at 2009-04-23 20:58:57 +0200.]
2009-04-23 20:58:57.261 TempApp[6021:10b] Number of items: 1
2009-04-23 20:58:57.264 TempApp[6021:10b] Number of items: 1

The Debugger has exited with status 0.

[ Voor 15% gewijzigd door Gerco op 23-04-2009 21:14 . Reden: Code-tags opgeleukt ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!

Pagina: 1