toegang array vanuit andere klasse discussie in Ontwikkelen voor iOS forum; ( verdwijnt na registratie ) question mensen , gezien globale variabelen niet worden gebruikt in objective c , weet iemand misschien wat de makkelijkste en snelste manier is om toegang ...
|
Registreer | FAQ | Ledenlijst | Kalender | Berichten van vandaag | Zoeken |
#1
|
|||
|
|||
toegang array vanuit andere klasse
question mensen , gezien globale variabelen niet worden gebruikt in objective c , weet iemand misschien wat de makkelijkste en snelste manier is om toegang tot een array in een andere klasse te krijgen.
mvg |
|
|
Gesponsorde links (verdwijnt na registratie)
|
#2
|
|||
|
|||
je kan wel global variables maken, maar dat terzijde...
Kan je niet gewoon zeggen: myVar = myObject.Array[1];? |
#3
|
|||
|
|||
Normaal kan je een variabele opvragen via de method "variabele". Het is niet mogelijk om een variabele rechtstreeks aan te spreken vanuit een ander object omdat alle variabelen van een object standaard private zijn in Objective-C (je kan dat veranderen, maar dat wil je eigenlijk niet). Je moet ze dus aanspreken via getter/setter methods. Je moet zelf voor elke variabele die je toegankelijk wilt maken een method variabele en setVariabele: aanmaken. In Objective-C v2 doe dit gemakkelijk door "variabele" via @property te definieren in je .h bestand en @synthesize in je .m bestand. Voorbeeld:
In je .h: Code:
@interface EenKlasse : NSObject { int eenInt; NSArray *eenArray; } @property (nonatomic, readwrite) int eenInt; @property (nonatomic, retain) NSArray *eenArray; @end Code:
@implementation EenKlasse; @synthesize eenInt; @synthesize eenArray; ... rest van je code ... Code:
EenKlasse *eenKlasse = [EenKlasse alloc] init]; NSArray *array = [eenKlasse eenArray]; NSArray *array = eenKlasse.eenArray; // Alternatieve schrijfwijze int getal = [eenKlasse eenInt]; Laatst gewijzigd door Myrdhin; 16-06-09 om 19:09. Reden: Typo |
#4
|
|||
|
|||
mijn dank is groot heren(@oentje mmmm ik dacht dat ik dat had gelezen van die global variables maar ik zal nog een keertje kijken ). @Myrdhin Thnx !.. (ik wil de array zelf niet aanpassen slechts wat waarden eruit halen)
Laatst gewijzigd door ulquiorra; 16-06-09 om 18:49. |
#5
|
|||
|
|||
Nog 1 opmerking over globale variabelen: doe het niet
(afgezien van constante globale variabelen natuurlijk) Interessant leesvoer: Singletons, AppDelegates and top-level data Laatst gewijzigd door Myrdhin; 16-06-09 om 19:15. |
#6
|
|||
|
|||
Ik heb in gedaan wat je zei , echter loop ik toch nog tegen een probleempje op.
Hetgeen wat ik wil bereiken is het volgende: Ik wil dus een object in mijn array aanspreken en deze toewijzen aan een labelproperty. dus zoiets Code:
[aLabel setTitle:[ thisarray objectAtIndex:2]forState:UIControlStateNormal]; Ik weet niet of dit de beste methode is maar het zou moeten werken mocht ik dus die array aan de praat krijgen ( ik wil graag mijn parser als aparte klasse houden vandaar deze vraag ). Ik krijg momenteel de unrecognized selector foutmelding. Dus ik neem aan dat ik een of andere functie moet maken en niet direct mijn array kan toewijzen? |
#7
|
|||
|
|||
Waarom laat je je parser geen array terugleveren? Die kan je dan weer overal gebruiken.
Iets als: Code:
XMLParser *xmlParser = [[XMLParser alloc] initWithContentsOfFile:@"file.xml"]; NSArray *parsedData = [xmlParser parse]; |
#8
|
|||
|
|||
Thanks !.. dit zou perfect moeten werken en dat doet het ook. Met deze aanpak kan ik inderdaad de array vanuit de andere klasse aanspreken.
Ik heb dat ook gedaan Code:
-(NSMutableArray *)testarray { testarray = [[NSMutableArray alloc] initWithObjects:@"Jantje" , @"Klaasje", nil] return testarray; } Code:
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { if(!currentElementValue) currentElementValue = [[NSMutableString alloc] initWithString:string]; else [currentElementValue appendString:string]; [testarray addObject:string]; NSLog(@"Processing Value: %@", currentElementValue); } |
#9
|
|||
|
|||
Je zei dat je een aparte klasse hebt gemaakt voor je parser. In die klasse gebruik je dan NSXMLParser en definieer je ook de delegates zoals
Code:
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string Dus of de array wel of niet gevuld is doet eigenlijk niet terzake volgens mij. Je roept je parser aan en daarna is je array gevuld. Vaak doe je dat soort initiele dingen in je applicationDidFinishLaunching functie. |
#10
|
||||
|
||||
ik zou de array pas aanmaken als de een instantie maakt van je eigen XMLParser.
|
#11
|
|||
|
|||
|
#12
|
|||
|
|||
Citaat:
Vergeef me mijn rookievraag (en kennis) dus maar hoe kan ik dit dan realiseren. Ik dacht namelijk nadat ik hem heb geinitialiseerd en gebruik in een andere functie (foundCharacters in mijn geval) ik het vrolijk in bv. parsedArray zou kunnen gebruiken zoiets Code:
-(NSMutable *)parsedArray { return myParsedArray; } Citaat:
Code:
NSURL *url = [[ etcetera ..... NSXMLParser *xmlParser = [[NSXMLParser alloc] etcetera.... //initialiseer de delegate XMLParser *parser = [[XMLParser alloc] initXMLParser]; // set delegate [xmlParser setDelegate:parser]; -(XMLParser *)initXMLParser - (void)parser ( NSXMLParser *)parser didStartElement - (void)parser( NSXMLParser *)parser foundCharacters -(void)parser( NSXMLParser *)parser didEndElement -(NSMutable *)giveArray @danielpunt Ik initiliaseer de array pas in mijn XMLParser klasse. |
#13
|
|||
|
|||
Als je nou in de init method van je XMLParser klasse een NSXMLParser object creeert en ook in die klasse zelf houd, dus niet ernaast zoals je nu hebt ben je er. Daarnaast creeer je in je in de init method van de XMLParser klasse ook het array wat je gaat vullen. Daarna roep je de parse method aan, die weer de parse method van NSXMLParser aanroept en vul je de array.
Dan heb je method die de gevulde array teruggeeft. Oftewel: maak je XMLParser klasse zo dat ie alles doet wat ie moet doen en de daarvoor benodigde klassen zelf in "beheer" heeft (zoals NSXMLParser). In code: Code:
@implementation XMLParser - (id)initWithURL(NSString *)aURL { NSURL *url = [[NSURL alloc] initWithString:aURL]; NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url]; [xmlParser setDelegate:self]; NSMutableArray *dataArray = [[NSMutableArray alloc] init]; return self; } - (BOOL)parse { return [xmlParser parse]; } - (NSMutableArray *)parsedDataArray { return dataArray; } -(void)parser ( NSXMLParser *)parser didStartElement {...} -(void)parser( NSXMLParser *)parser foundCharacters {...} -(void)parser( NSXMLParser *)parser didEndElement {...} Laatst gewijzigd door Myrdhin; 18-06-09 om 13:54. |
#14
|
|||
|
|||
aha.. ok super, ik snap wat je wilt doen
zelf heb ik dit gedaan Code:
@implementation XMLParser -(id) initXMLparser { NSURL *url = [[NSURL alloc] initWithString:@"http://www.mijnsite.com/super.xml"]; xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url]; [xmlParser setDelegate:self]; testarray = [[NSMutableArray alloc] init]; return self; } -(BOOL)parsing { return [xmlParser parse]; } -(NSMutableArray *)GetArray { return testarray; } etc. onderaan staan mijn parser startElement parser foundCharacters parser EndElement vervolgens in de applicationDidFinishLaunching Code:
momenteel XMLParser *parser = [[XMLParser alloc] initXMLParser]; BOOL success = [parser parse]; if(success) NSLog("no error"); else NSLog("error"); eerste version //de code van de huidige initXMLParser xmlParser setDelegate:parser BOOL succes = [xmlParser parse] if(success) NSLog("no error"); else NSLog("error"); Ik krijg nu ook sowieso waarschuwing bij parser ( dat XMLParser maybe niet reageert op parse ) en wanneer ik het run een foutmelding ( selector herkent het niet [XMLParser parse] In mijn redenatie zie ik wat je bedoelt , heb je ook top uitgelegd , heb het alleen nog niet kunnen realiseren in mijn code. Again vergeef me mijn onkunde. ps. Ik heb de parser van deze uitleg in mijn programma gebruikt Parsing XML Files - iPhone SDK Articles |
#15
|
|||
|
|||
Je definieert in je XMLParser klasse de method "parsing", maar je roept "parse" aan, logisch dat ie die niet vind.
|
#16
|
|||
|
|||
sorry dat ik zo laat reageer ,maar ten eerste
pffff wat een slaapkop was ik natuurlijk! .. ( parsing en parse ) tweede ik wil je sowieso echt super bedanken echt top en topadviezen! De code is nu zoals het moet zijn. Echter krijg ik niet het resultaat dat ik wens. Heb alleen het gevoel dat de oorzaak ergens anders ligt. Zoals ik al eerder zei wil ik graag vanuit een array verschillende strings halen om de tekst op mijn buttons (of labels ) te krijgen. Op de een of andere manier lijkt het of de arrays alleen maar werken met de benodigde inhoud als ik er initWithObjects of zoiets dergelijks van maak. Ik ga er nog even goed voor zitten! Ik kom er nog op terug. |
#17
|
|||
|
|||
Arrays zijn alleen maar lijsten van objecten. Een NSString is een object. Daarnaast zijn er 2 typen arrays: Mutable en niet mutable. Als je na het aanmaken van een array nog dingen wilt toevoegen moet het dus een NSMutableArray zijn i.p.v. NSArray.
|
#18
|
|||
|
|||
ok, ik gebruik ook alleen NSMutableArray.
Als ik een NSLog ertussen plaats kan ik zien dat hij mijn array ook netjes vult. Ook kan ik zien in mijn debugger console dat eerst mijn parser wordt gestart voor hij naar het mainscherm gaat. Ik zou dus zelf denken dat ik de objecten uit deze array ( strings in dit geval ) gewoon kan gebruiken om bv. mijn button of label dus van tekst te voorzien. Helaas geeft het dus een een lege bedoeling. Het lijkt dus echt alsof hij automatisch de lege array initialiseert. En ondanks dat ik het vul , het gewoon weigert er iets mee te doen. Misschien ligt het wel aan de volgorde waarin ik bepaalde objecten initialiseer maar kan me eerlijk gezegd nauwelijks voorstellen. Het volgende gebeurt( of moet gebeuren ). 1) Parser laadt xml bestand loopt er doorheen vult array met string objecten. 2) mainscreen wordt geladen. En buttons en eventueel labels halen strings uit de NSMutable array.( momenteel heb ik deze actie achter een buttonklik geplaatst maar dat moet voordat het scherm wordt geladen gedaan worden). 3) vanuit mainscreen kun je naar een tweede scherm die ook buttons/labels heeft en ook deze zal z'n teksten halen uit de array. gedeelte 1 doet het dus , maar gedeelte 2 en 3 uiteraard dus niet. Zoals ik zei ik denk dat er iets mis gaat in de volgorde dus ik ga nog een aantal zaken op een rij zetten en wat testjes uitvoeren. Mocht ik eruit komen post ik uiteraard wat er mis ging |
#19
|
||||
|
||||
als je het MVC pattern gebruikt is het beter om bijvoorbeeld een initWithButtons: method toe te voegen aan de tweede viewController die je presenteerd en die array mee te geven op het moment dat je het tweede scherm wilt weergeven.
dat is dus voor punt 3 voor punt 2 moet je dus als de XML geladen en geparsed is door de array lopen en dan de buttons aanmaken en vullen. |
#20
|
|||
|
|||
Had even een kleine vakantie maar ben er weer.
Ben weer druk bezig met mijn "probleempje". pfffff man o man het moet echt simpel zijn denk ik bij mezelf maarja. Ik wil bijna mijn code meenemen naar een objective c leraar verdorie zeg maarja, lol. Anyway initWithButtons :Method , ik neem aan dat je die dus ergens in de ApplicationDidFinishLaunching methode in de delegate wilt doen right? Ff kleine samenvatting http://www.iphonesdkarticles.com/200...xml-files.html zij doen in principe hetgeen wat ik wil alleen dan heb ik dus mijn eigen nib file ontworpen die dus titels krijgt vanuit de xml file ... bij de foundcharacters heb ik dus een array geplaatst en hieruit wil ik dus mijn outlets aan gaan passen. ( ik zie echter dat zij een andere manier hanteren maar gezien mijn onervarenheid pak ik het zo dus aan ) Laatst gewijzigd door ulquiorra; 07-07-09 om 00:08. |
Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten) |
|
Soortgelijke discussies |
||||
Discussie | Auteur | Forum | Reacties | Laatste bericht |
Archiveren van UIImageView's rechtstreeks uit array zonder [self.view subviews] | celaeno2 | Ontwikkelen voor iOS | 1 | 24-11-10 02:14 |
e-mailen vanuit andere app's gaat via Outbox (en niet rechtstreeks) | ToastNL | iPhone Apps | 0 | 04-09-10 22:19 |
Array met dicts naar een plist schrijven | MaximalFX | Ontwikkelen voor iOS | 0 | 18-11-09 10:49 |
NSString bepalen vanuit een andere view | Jelle Ages | Ontwikkelen voor iOS | 11 | 24-10-09 18:57 |
UILabel updaten vanuit andere class | Niels2678 | Ontwikkelen voor iOS | 18 | 05-10-09 12:42 |
|
|