iCulture forum | iPhone, iPad,  iPod touch, Apple TV en iOS

iCulture forum | iPhone, iPad, iPod touch, Apple TV en iOS (https://forum.iculture.nl/)
-   Ontwikkelen voor iOS (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/)
-   -   Variabele uit andere class halen (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/88133-variabele-andere-class-halen.html)

DJ14 02-04-11 17:01

Variabele uit andere class halen
 
Hallo,

In Class 1 heb een tableview staan. In didSelectRowAtIndexPath: krijgt een NSString variabele (v1) een waarde, afhankelijk van welke table row geselecteerd is. Nadat v1 een waarde heeft gekregen, wordt er een nieuwe viewcontroller (uit Class 2) op het scherm gepresenteerd. Nu wil ik dat Class 2 variabele v1 uit class 1 haalt om er vervolgens iets mee te gaan doen. Hoe benader ik een variabele uit een andere class?

Class 1:

Code:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.section == 1){
                v1 = [[NSString alloc] init];
                v1 = [eenArray objectAtIndex:indexPath.row];
                [self.navigationController pushViewController:class2 animated:YES];
        }
}


Hollance 02-04-11 19:20

Je geeft die variabele mee aan class2:

Code:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.section == 1){
        v1 = [[NSString alloc] init];
        v1 = [eenArray objectAtIndex:indexPath.row];

        class2.v = v1;
        // of met een method: [class setV:v1];

        [self.navigationController pushViewController:class2 animated:YES];
    }
}


DJ14 02-04-11 20:09

THANKS! Het werkt :)

Geno 02-04-11 21:19

Tip: zou wel op je memory management letten.

In dit geval zou ik NSString *v1 = [eenArray objectAtIndex:indexPath.row]; doen, ipv alloc init gebruiken.

Of [v1 release]; nadat je je setter hebt gebruikt.

nop 04-04-11 19:02

Inderdaad, je kunt jezelf in de nesten werken wat betreft het geheugenmanagement.
Voor het uitwisselen van data op schermen gebruik ik altijd een singleton object. Dat kun je zien als een soort klasse met globale variabelen ('t is verpakt als singleton geen vies woord ;) ), en is superhandig EN overzichtelijk.

wubbe 05-04-11 10:28

Als je wat verder zoekt is (bij verkeerd gebruik) een singleton wel een vies woord (ik vind toepassing van een singleton in dit voorbeeld verkeerd gebruik...).

Het voorbeeld van Hollance is (met een kleine wijziging) toch prima?
De regel:
Code:

v1 = [[NSString alloc] init];
is alleen volledig overbodig. Je gaat v1 2 keer een waarde geven. De tweede keer overschrijft de eerste keer. Buiten dat je een geheugen-lek introduceert is het nergens voor nodig. Daarnaast zou ik van v1 een lokale variabele maken binnen het if-block.

Dus:
Code:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.section == 1){
        NSString * v1 = [eenArray objectAtIndex:indexPath.row];
        [class2 setV:v1];
        [self.navigationController pushViewController:class2 animated:YES];
    }
}



Alle tijden zijn GMT +2. Het is nu 00:23.