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/)
-   -   NSString bepalen vanuit een andere view (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/46444-nsstring-bepalen-vanuit-andere-view.html)

Jelle Ages 21-10-09 12:16

NSString bepalen vanuit een andere view
 
Dag allemaal!

Ben druk bezig met de iPhone SDK en heb weer een vraag. Ik heb een View-Based-application waarin ik de standaard ViewController .h en .m gebruik voor mijn MainView. Ik heb ook nog een view + viewController gemaakt aan de hand van deze tutorial.
Nu wil ik vanuit die tweede (Second View) d.m.v. een TextField, een NSString, die gemaakt is in de MainViewController, laten wijzigen. Dit wil ik dan weer in de MainViewController kunnen oproepen.
Hoe moet ik dit doen?

Jelle

Frog 22-10-09 15:00

Het kan op meerdere manieren. Hier kan je een aantal van die manieren zien.

Jelle Ages 22-10-09 16:13

Bedankt, maar eerlijk gezegd word ik hier (als beginnende developer) niet erg wijzer van.
Ik heb dus een standaard view, die bediend wordt door een viewController. Nu heb ik een tweede view, die ik laat zien door de code:
Code:

[self presentModalViewController:secondView animated:YES];
Dit werkt allemaal. Nu wil ik deze view gebruiken als een soort scherm om een aantal instellingen te bepalen voor de MainView. Hierin heb ik bijvoorbeeld twee UITextFields die ik gebruik als Username en Password-veld. Als ik dan op een UIButton klik, gaat de applicatie terug naar de MainView. Ik wil dan ook de tekst, die de gebruiker heeft ingevoerd op het instellingen-scherm, gebruiken.
Is het mogelijk om met een simpele code, de UITextFields die in het instellingen-scherm staan, te gebruiken in de MainView?

Alvast bedankt!

Jelle

Frog 22-10-09 17:16

Als je dat wilt doen is het makkelijkste om de secondView de instellingen te laten bewaren en dan in de viewWillAppear van je rootView de instellingen op te halen en weer te geven. Als je meer hulp nodig hebt hoor ik het wel.

Jelle Ages 23-10-09 11:56

Ik snap wat je ongeveer bedoelt, maar ik ben nog niet zolang bezig met Objective C. Mijn vraag is dan ook: welke code heb ik nodig om die instellingen te bewaren en op te halen? Is dit makkelijk?

Jelle

Frog 23-10-09 13:46

Ik dacht dat je de code daarvoor al had, omdat je zei dat het een instellingen scherm is en instellingen wil je natuurlijk niet elke keer opnieuw bewaren. Het gaat er nu om wat je wilt doen: een instellingen scherm maken dat je maar één keer hoeft te openen en dat je instellingen bewaart, zodat je het de volgende dat je opstart ook hebt, of een scherm maken dat je elke keer dat je opstart opnieuw moet invullen. Welke van die twee wil jij?

Jelle Ages 23-10-09 17:13

Fijn dat je het zegt, want ik was er zelf nog niet opgekomen :D ! Ik zou inderdaad graag willen weten hoe ik de instellingen kan opslaan, zodat ik deze niet elke keer hoef in te laten vullen. Maar hoe doe ik dat? Vereist dat veel kennis, of is er een simpele code om dit te doen?

Jelle

Frog 23-10-09 17:56

Ik weet het niet precies. Ik heb het zelf nog nooit gebruikt. Hier is een document waar je daar wat informatie over kan vinden. Het zoek er niet al te moeilijk uit. Ik zou er gewoon wat mee proberen.

Heb ophalen en weergeven van je data moet je dan in de viewWillAppear method doen.

markvwijnen 24-10-09 10:33

Inderdaad een beetje een vaag verhaal maar als data tussen twee views kan met de gebruikelijke:
- Delegate method (Met deze methode kan je de NSString van de andere view direct aanroepen)
- NSNotification Center

Of je kan de pointer van de NSString doorsturen en die door de Second View laten aanpassen. Genoeg mogelijkheden in ieder geval.

Wat betreft het opslaan van instellingen, daarvoor kan je een SQLiteDatabase gebruiken: CrystalMinds’ SQLiteDatabase Library CrystalMinds

Code:

    //1. Maak een Tabel aan
    [[CMSQLiteDatabase sharedDatabase] insertTable:@"config"];
   
    //2. Maak de variabel aan
    [[CMSQLiteDatabase sharedDatabase] insertColumns:[NSDictionary dictionaryWithObject:CMSQLiteDatabaseDataTypeString forKey:@"username"] intoTable:@"config"];
    [[CMSQLiteDatabase sharedDatabase] insertRow:nil intoTable:@"config"];
   
    //3. Zet de waaarde van de variabel
    [[CMSQLiteDatabase sharedDatabase] updateRowWithValues:[NSDictionary dictionaryWithObject:@"jellepelle1234" forKey:@"username"] inTable:@"config"];
   
    //4. Pak de waarde uit de database
    NSString *username = [[CMSQLiteDatabase sharedDatabase] variableForQuery:@"SELECT username FROM config" column:@"username" rowOffset:0];

Voor een configuratie is het gebruikelijker om NSUserDefaults te gebruiken zie:
Mac Dev Center: NSUserDefaults Class Reference

Frog 24-10-09 16:02

Hij hoeft de data niet de sharen tussen twee views. Hij wil instellingen opslaan. Dat kan natuurlijk d.m.v. SQLite, maar dat is daarvoor zwaar overkill en het zorgt voor een snelheidsverlies. Jouw library is daarvoor ook zwaar overkill. Ik zou de manier gebruiken waar ik in mijn vorige bericht naar gelinkt heb. Het zorgt uiteindelijke voor een betere/snellere oplossing. Als het niet lukt willen de mensen hier je wel helpen.

markvwijnen 24-10-09 16:39

Klopt, daarom zei ik ook
Citaat:

Voor een configuratie is het gebruikelijker om NSUserDefaults te gebruiken zie:
Mac Dev Center: NSUserDefaults Class Reference
Maar ik zie nu dat ik een bericht overzien heb waarin jij daar ook naar verwijst dus we denken iig hetzelfde ;)

En SQLite is eigenlijk ook alleen maar praktisch als je data hebt die je wilt kunnen sorteren. Zoals een database voor cocktails waarin je een query kan gebruiken om alle cocktails eruit te halen waarin Safari zit bijv.

Frog 24-10-09 17:57

Sorry, ik heb over die laatste regel van jou heen gelezen. Ik ben het dan helemaal met jou eens.


Alle tijden zijn GMT +2. Het is nu 08:33.