//

Uitlezen 'variabelen' tussen 'views'

Uitlezen 'variabelen' tussen 'views' discussie in Ontwikkelen voor iOS forum; ( verdwijnt na registratie ) Wellicht is het supersimpel, maar kan iemand mij vertellen hoe je waardes vanuit verschillende views kan benaderen? Voorbeeld: ik heb een rootViewController die een instantie ...



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 03-04-09, 10:02
Malork's schermafbeelding
Malork Malork is offline
• iOS 5.1.1
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Landgraaf
Berichten: 178
Stuur een bericht via MSN naar Malork
Standaard Uitlezen 'variabelen' tussen 'views'

Wellicht is het supersimpel, maar kan iemand mij vertellen hoe je waardes vanuit verschillende views kan benaderen?

Voorbeeld: ik heb een rootViewController die een instantie van 'settingsViewController' initialiseert en een instantie van 'uitleesViewController' heeft. Nu wil ik de waarde, stel, een naam in een UITextField die ik in settingsViewController heb ingevoerd, uitlezen / tonen in bijvoorbeeld een UILabel in uitleesViewController.

De views kunnen elkaar uiteraard niet direct aanroepen omdat het instancies zijn die geinitieerd zijn vanuit mijn rootViewController, dus neem ik aan dat het via de rootViewController gaat..of sla ik de plank nu mis?

Op iphonedevsdk ben ik wel soortgelijke vragen ook tegengekomen, maar daar kwam ik niet echt mee weg.

Alvast bedankt voor diegenen die mij mijn 'oh ja, doh! dat ik zo stom ben dat ik dat niet zie!' moment geeft.

EDIT: Na gisteravond gespeeld te hebben blijkt, als ik het goed heb, te gaan middels een UIApplication-class die je in je views include, en instantieert via UIApplication *mijnDelegates = [[UIApplication sharedApplication] mijnDelegates];

Hierin definieer je dan je 'globale variabelen' zodat elke view middels deze 'delegate' ze kan benaderen.

Laatst gewijzigd door Malork; 03-04-09 om 10:13.
Advertentie
Advertentie Gesponsorde links (verdwijnt na registratie)

  #2  
Oud 03-04-09, 11:50
ideveloper's schermafbeelding
ideveloper ideveloper is offline
• iOS 5.1
• 5.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Apr 2008
Locatie: Bodegraven
Berichten: 339
Standaard

Zo kun je het oplossen idd. Je kunt ook zorgen dat je uitleesViewController van de settingsViewControler weet. Dus je kunt bijvoorbeeld in de settingsViewController een attribuut uitleesViewController geven en deze tijdens het initialiseren zetten. Dan kun je altijd bij je uitleesViewController vanuit je settingsViewController zonder dat je dit via de sharedApplication hoeft te doen.
  #3  
Oud 03-04-09, 11:58
Malork's schermafbeelding
Malork Malork is offline
• iOS 5.1.1
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Landgraaf
Berichten: 178
Stuur een bericht via MSN naar Malork
Standaard

toch? ik dacht dat dat niet ging omdat beide Controllers vanuit de rootController geinstantieerd werden. Volgens mij had ik dat ook al eens geprobeerd maar werkte het niet omdat bijvoorbeeld uitleesViewController een nieuwe instance maakte van settingsViewController; dan heb ik dus blijkbaar iets verkeerd gedaan...
  #4  
Oud 03-04-09, 12:53
sossienl's schermafbeelding
sossienl sossienl is offline
iPhone(club) Guru
• iOS 8.0
• 8.0
• Besturingssysteem: Mac OS X
 
Geregistreerd: Sep 2007
Locatie: Blaricum
Berichten: 601
Standaard

Ik doe het als volgt:

- Mijn eerste view is een Table View, onder function tableView didSelectRowAtIndexPath

DetailerViewController *dvController = [[DetailerViewController alloc] initWithNibName:@"DetailerView" bundle:[NSBundle mainBundle]];
dvController.selectedCountry = storyLink;
dvController.selectedHalte = storyHalte;
dvController.selectedPostal = storyPostal;
dvController.selectedPrepre = storyPrePre;

[self.navigationController pushViewControllervController animated:YES];
[dvController release];
dvController = nil;



In mijn tweede View het volgende;

@synthesize selectedCountry;
@synthesize selectedHalte;
@synthesize selectedPostal;
@synthesize selectedPrepre;


Tevens declare ik ze in de header file

Geen idee of dit hierboven al beknopt benoemd was, just my 2 cents.
__________________
iPhone (web) developer. Kijk op http://www.appsstore.nl voor alle Nederlandse iPhone apps! Twitter? klik!
  #5  
Oud 03-04-09, 13:46
Matisse Matisse is offline
• iOS 5.0 Beta
• 5.0 Beta
• Besturingssysteem: Mac OS X
 
Geregistreerd: Aug 2008
Locatie: Antwerpen
Berichten: 89
Standaard

Kijk anders ook eens naar "key-value observing". Je registreert je dan zogezegd voor notificaties die gestuurd worden als die bapaalde variabele wijzigt, zo verklein je ook de interface tussen beide controllers.
  #6  
Oud 03-04-09, 14:56
Malork's schermafbeelding
Malork Malork is offline
• iOS 5.1.1
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Landgraaf
Berichten: 178
Stuur een bericht via MSN naar Malork
Standaard

Werkt key value observing ook op de iPhone dan? Dat zou interessant zijn (dacht dat dit alleen met Mac OSX werkte).

In ieder geval iedereen bedankt; ik weet nu dat ik niet helemaal verkeerd zat en dat er verschillende methodes zijn (en Sossie, bedankt voor je voorbeeld!). Dat worden weer late dagen dit weekend!

Laatst gewijzigd door Malork; 03-04-09 om 15:03.
  #7  
Oud 03-04-09, 15:29
Thaurin's schermafbeelding
Thaurin Thaurin is offline
• iOS 2.1
• Besturingssysteem: Windows
 
Geregistreerd: Sep 2008
Berichten: 141
Standaard

Ik ben nog niet met multiple views aan de slag geweest, maar kun je niet gewoon een connectie leggen tussen rootViewController en settingsViewController, deze #import'en in settingsViewController en zo een outlet in rootViewController benaderen?
  #8  
Oud 03-04-09, 16:18
Malork's schermafbeelding
Malork Malork is offline
• iOS 5.1.1
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Landgraaf
Berichten: 178
Stuur een bericht via MSN naar Malork
Standaard

nou, je hebt eigenlijk 3 viewcontrollers: een rootViewController, een settingsViewController en een uitleesViewController. rootVC instantieert de andere 2 controllers en regels het switchen tussen deze 2 views.
Als je dus settingsViewController in uitleescontroller import en instantieert, maak je dus een nieuwe instance (object) met zijn eigen runtime-variabelen, dus dat werkt niet (althans, in PHP niet...).
Daarom zei ik al: misschien is het heel eenvoudig en zie ik iets over het hoofd, want in eerste instantie had ik jouw idee ook in gedachte, maar dat werkt (als je nadenkt over de basis OOP) niet, maargoed, Objective-C heeft me wel vaker verrast.
  #9  
Oud 03-04-09, 16:22
Thaurin's schermafbeelding
Thaurin Thaurin is offline
• iOS 2.1
• Besturingssysteem: Windows
 
Geregistreerd: Sep 2008
Berichten: 141
Standaard

Kan settingsViewController de instance van rootViewController dan niet benaderen? In dat geval kan settingsViewController toch gewoon [rootViewController uitleesViewController] lezen via een outlet?

Ik refereer aan de switching views video tutorial.

Laatst gewijzigd door Thaurin; 03-04-09 om 16:26.
  #10  
Oud 03-04-09, 16:34
Malork's schermafbeelding
Malork Malork is offline
• iOS 5.1.1
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Landgraaf
Berichten: 178
Stuur een bericht via MSN naar Malork
Standaard

Citaat:
Oorspronkelijk geplaatst door Thaurin Bekijk bericht
Kan settingsViewController de instance van rootViewController dan niet benaderen? In dat geval kan settingsViewController toch gewoon [rootViewController uitleesViewController] lezen via een outlet?
Oh zo bedoel je; ja daar had ik ook snel aan gedacht maar niet geprobeerd; je bedoelt dus een UIApplication in de uitleesViewController XIB plaatsen en dan zo koppelen. Theoretisch maakt ie dan ook weer een aparte instance aan van rootViewController, toch?

Met dat sharedApplication komt het nagenoeg in de buurt wat jij bedoelt maar dat is programmatig.
  #11  
Oud 03-04-09, 16:49
Thaurin's schermafbeelding
Thaurin Thaurin is offline
• iOS 2.1
• Besturingssysteem: Windows
 
Geregistreerd: Sep 2008
Berichten: 141
Standaard

Als settingsViewController en uitleesViewController in dezelfde xib staan, en hun views worden geplaatst op de view van rootViewController, kun je in IB toch gewoon outlets tussen de verschillende view controllers maken? En aangezien rootViewController instanties van settingsViewController en uitleesViewController bevat, kun je hier toch gewoon outlets voor maken? Zodat je een connectie kunt maken in IB tussen rootViewController en settingsViewController? En dan dus uitleesViewController kan benaderen in settingsViewController?

Een hoop vragen, maar misschien is de structuur van jouw applicatie compleet anders of heb ik het helemaal fout.
  #12  
Oud 03-04-09, 17:02
Malork's schermafbeelding
Malork Malork is offline
• iOS 5.1.1
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Landgraaf
Berichten: 178
Stuur een bericht via MSN naar Malork
Standaard

Oef mijn hoofd duizelt ervan maar alle views zijn aparte XIB-files. Dat idee had ik ook zo'n beetje inderdaad, echter als je straks een applicatie hebt met misschien wel 10 views, dan krijg je een wirwar, lijkt me, maar het is zeker het proberen waard en zou best wel eens ergens van toepassing kunnen zijn.

Ik bedoelde eigenlijk met mijn OP meer iets wat vergelijkbaar is met bijvoorbeeld globals of sessievariabelen in PHP, die 'zweven' en zijn door elke class te benaderen.

mijn hoofd duizelt ervan

Laatst gewijzigd door Malork; 03-04-09 om 17:07.
  #13  
Oud 03-04-09, 17:19
Thaurin's schermafbeelding
Thaurin Thaurin is offline
• iOS 2.1
• Besturingssysteem: Windows
 
Geregistreerd: Sep 2008
Berichten: 141
Standaard

Aha, de video die ik linkte maakt dus geen aparte XIB voor iedere view. Hij zegt dat hij dit voor kleinere apps fijner vindt, maar grotere apps werken efficienter met aparte XIBs, aldus de goede man.

Ik ga hier thuis even mee puzzelen.
  #14  
Oud 03-04-09, 17:33
Malork's schermafbeelding
Malork Malork is offline
• iOS 5.1.1
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Landgraaf
Berichten: 178
Stuur een bericht via MSN naar Malork
Standaard

Oh de video had die je postte had ik niet gezien (de link) via de iPhone; nu wel. zeker interessant om eens naar te kijken.

op iPhonedevSDK staat ook een mooie video, met daaronder een link naar een HQ-versie, maar die is er niet meer en de kwaliteit is te belabberd om er iets uit te halen. Ik zal eens vragen daar of deze video gerepost kan worden.
  #15  
Oud 03-04-09, 17:50
Matisse Matisse is offline
• iOS 5.0 Beta
• 5.0 Beta
• Besturingssysteem: Mac OS X
 
Geregistreerd: Aug 2008
Locatie: Antwerpen
Berichten: 89
Standaard

Citaat:
Oorspronkelijk geplaatst door Malork Bekijk bericht
Werkt key value observing ook op de iPhone dan? Dat zou interessant zijn (dacht dat dit alleen met Mac OSX werkte).
Werkt perfect.
  #16  
Oud 03-04-09, 18:27
Thaurin's schermafbeelding
Thaurin Thaurin is offline
• iOS 2.1
• Besturingssysteem: Windows
 
Geregistreerd: Sep 2008
Berichten: 141
Standaard

Citaat:
Oorspronkelijk geplaatst door Malork Bekijk bericht
Ik zal eens vragen daar of deze video gerepost kan worden.
Dank, ik denk dat deze zaken er niet goed genoeg in kunnen zitten. Dus van zo veel mogelijk kanten met wellicht verschillende perspectieven kan alleen maar goed zijn.

Wat betreft key-value observing, ik heb dat eens een keer gezien in een keynote. Zo kun je een control koppelen aan een ander object, en als de waarde (bijvoorbeeld een slider) veranderd, veranderd een waarde in het object automatisch mee. Weinig code, snel in elkaar gezet. Klinkt erg leuk, alhoewel er mensen zijn die zweren dat we zo snel mogelijk van Interface Builder af moeten en zo veel mogelijk in code moeten doen.
  #17  
Oud 03-04-09, 18:56
Malork's schermafbeelding
Malork Malork is offline
• iOS 5.1.1
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Landgraaf
Berichten: 178
Stuur een bericht via MSN naar Malork
Standaard

Citaat:
Oorspronkelijk geplaatst door Thaurin Bekijk bericht
Dank, ik denk dat deze zaken er niet goed genoeg in kunnen zitten. Dus van zo veel mogelijk kanten met wellicht verschillende perspectieven kan alleen maar goed zijn.

Wat betreft key-value observing, ik heb dat eens een keer gezien in een keynote. Zo kun je een control koppelen aan een ander object, en als de waarde (bijvoorbeeld een slider) veranderd, veranderd een waarde in het object automatisch mee. Weinig code, snel in elkaar gezet. Klinkt erg leuk, alhoewel er mensen zijn die zweren dat we zo snel mogelijk van Interface Builder af moeten en zo veel mogelijk in code moeten doen.
Ja met KVO had ik al eens gespeeld op Mac, was erg 'grappig' om te doen; ben benieuwd hoe het op de iPhone gaat.

de link naar dat wat ik bedoelde op iphonedevsdk is Multiple XIB how-to - iPhone Dev SDK Forum de HD-versie doet het nu wel weer blijkbaar, maar moet je een vimeo-account hebben. de in-post movie is slecht, maar daaronder staat een link naar een wel goed zichtbaar bestand: iPhone Tutorial - Multiple XIB files on Vimeo

...al met al weer genoeg om te lezen / zien / doen, en dit is nog maar één aspect van wat ik allemaal wel niet zou willen weten. Ik moet mezelf maar weer eens gaan afremmen geloof ik
  #18  
Oud 03-04-09, 19:11
Thaurin's schermafbeelding
Thaurin Thaurin is offline
• iOS 2.1
• Besturingssysteem: Windows
 
Geregistreerd: Sep 2008
Berichten: 141
Standaard

Bedankt, gelijk effe kijken. Ik ga het uitproberen en kom erop terug. De HD versie deed het trouwens gewoon zonder account.

Ik denk dat het op een gegeven moment ineens zal afremmen, zodra bepaalde zaken gaan overlappen en alles zo'n beetje op z'n plaats valt. Dit uiteraard pas na eerst zelf veel te hebben geëxpirimenteerd.

Laatst gewijzigd door Thaurin; 03-04-09 om 19:50.
  #19  
Oud 03-04-09, 21:15
Malork's schermafbeelding
Malork Malork is offline
• iOS 5.1.1
• 5.1.1
• Besturingssysteem: Mac OS X
 
Geregistreerd: Jun 2008
Locatie: Landgraaf
Berichten: 178
Stuur een bericht via MSN naar Malork
Standaard

Het is me net op de manier gelukt zoals iDeveloper al beschreef; eigenlijk logisch want in PHP (sorry voor als ik het steeds vergelijk...) doe je het ook zo.

Wat doe ik:

ik heb:
- een rootViewController
- een settingsViewController
- een uitleesViewController

in de uitleesViewController staat in de .h file:

@class settingsViewController

met vervolgens een declaratie:
settingsViewController *settingsVC;

@property (nonatomic, retain) settingsViewController * settingsVC

in de .m-file synthesize ik settingsVC en #import ik de settingsViewController.h
deze uitleesVC synthesize ik ook in de .m-file uiteraard.

tijdens starten van de applicatie laad rootViewController de settingsViewController en toont deze.
Op dit moment kun je dus in settingsViewController je settings doen.
Wanneer ik op een button druk (die verbonden is met een IBOutlet in rootViewController) wordt mijn uitleesViewController geladen. Nadat ik deze heb geinstantieerd passeer ik de pointer die rootViewController heeft voor de settingsViewController naar de uitleesViewController's settingsVC met:

[uitleesVC setSettingsVC:self.settingsVC];

Ik hoop dat het een beetje duidelijk was; gelukkig zijn er dus diverse manieren om gegevens uit te lezen uit andere controllers.
  #20  
Oud 03-04-09, 22:04
Thaurin's schermafbeelding
Thaurin Thaurin is offline
• iOS 2.1
• Besturingssysteem: Windows
 
Geregistreerd: Sep 2008
Berichten: 141
Standaard

Aha, dus zodra rootViewController de message krijgt om de views te switchen, geef je gelijk settingsViewController door aan die nieuwe view (uitleesViewController). Ik moet het zelf even proberen om het te solidificeren (in het Engels klinkt dat woord beter :/), maar ik snap de bedoeling.
Reageren



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

 

Soortgelijke discussies

Discussie Auteur Forum Reacties Laatste bericht
NSURLConnection webpagina uitlezen bluecola Ontwikkelen voor iOS 2 02-05-11 16:07
bluetooth telefoonboek uitlezen damnet iPhone accessoires en onderdelen 0 27-10-09 20:23
meerdere views in landscape Tim14ww Ontwikkelen voor iOS 0 17-10-09 00:47
Views... JWVD Ontwikkelen voor iOS 4 28-11-08 14:20
Tab bar, meerdere views BadSide Ontwikkelen voor iOS 1 22-09-08 05:35

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 14:54.