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/)
-   -   PHP -> Objective C (reageerders verdienen geld...;)) (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/31816-php-objective-c-reageerders-verdienen-geld.html)

MichMich 21-03-09 18:16

PHP -> Objective C (reageerders verdienen geld...;))
 
Zoals ik in dit topic al vertelde ben ik hard bezig om het kwartje te laten vallen.

Ik heb zelf een hoog PHP niveau, maar Objective C is toch even andere koek.

Toch had ik net even een "Ohhhh, dat betekent het!" momentje toen ik me realiseerde dat:

Objective C:
Code:

[myObj doSomething];
op hetzelfde neerkomt als:

PHP:
Code:

$myObj->doSomething();
Een dergelijk eureka moment helpt mij (en anderen?) behoorlijk bij het begrijpen van Objective C.

Wie kan er nog meer van dit soort voorbeelden noemen?

Verdien geld met je hulp:
Om de echte diehard programmeurs hier te motiveren hier hun input te leveren, beloof ik bij deze plechtig hun app aan te schaffen wanneer ze in dit topic ook ff hun appStore App noemen... ;) (mits deze app uiteraard geen exorbitante prijs heeft... :P)

Malork 22-03-09 01:44

haha nou ik kom ook van PHP af (hoog nivo ook) maar Objective-C is wel ff andere koek.

Ik ben eigenlijk PHP dit keer ECHT gaan zien als een ongelooflijk luie taal. String declareren? nah! Int/float? Nah, gewoon erinzetten! PHP vogelt het zich wel uit.

Ik ben zelf handmatig het volgende aan het 'omzetten':

$mijnClass = new deClass;
$deVar = $mijnClass->getWaarde();

lijkt simpel, is het ook. zelfs in Obj-C lukt het me om een zelfstandige losstaand class-file te includen (bijvoorbeeld een aparte .h en .m-file met een class met wat methodes) en die include ik weer in bijvoorbeeld een viewController.m, instantieer hem zoals hierboven,maar ergens doe ik iets fout.... de debugger toont dat de waarde die ik in een methode zet (of een NSLog()) wordt niet getoond, terwijl ik de methodes na instantiering (is dat een woord?) wel kan aanroepen (krijg in ieder geval geen debug-error en alles gaat door).

Ergens zie ik iets over het hoofd, maar ook daar kom ik wel uit.

EDIT: gevonden... hoe dom kun je zijn om malorkClass *malork = [MalorkClass init] te doen ipv malorkClass *malork = [[malorkClass alloc] init]; memorymanagement!! Ik haat PHP op dit vlak... die maakt het te makkelijk...

Ik snap je punt though; ik dacht 'ik spring wel even in' maar dat was toch lastiger. Waar ik vooral moeite mee heb is om de luie PHP-manier af te leren en ik denk dat ik ook teveel tegelijk wil proberen, of denk dat het anders werkt dan het feitelijk doet.

MichMich 22-03-09 10:18

Exact, het is echt heel anders denken. Maar toch is een OOP PHP basis best handig. Je snapt wat classes zijn en dat je een object 'iets kunt laten doen'.

Inmiddels is het kwartje wat betreft de classes (controllers) wel redelijk aan het vallen (maar hij heeft de grond nog niet geraakt ;)), ik snap alleen nog niet helemaal waar ik op een heldere manier de XIB files moet plaatsen. (Ik begrijp waar ze voor zijn :P maar heb nog een beetje het gevoel van 'ohw, jah, die xib file hoort geloof ik hierbij ....');

Anyway, ondanks dat ik snap dat er niet een PHP-Objective C 'vertaalwoordenboek' te maken is, denk ik dat er nog wel een paar voorbeelden genoem kunnen worden wat het iets duidelijker te maken.

Bijvoorbeeld:

PHP:
Code:

class MYCLASS {
  function bla() {
    ...
  }
  ...
}

komt volgens mij wel redelijk op het zelfde neer als...
Objective C:
Code:

@implementation MYCLASS {
  - (void) bla {
    ...
  }
  ...
}


Of sla ik de plank nu helemaal mis?

Malork 22-03-09 10:28

nee, klopt helemaal. in je header-file doe je, net zoals in PHP netjes verklaren welke instance variabelen je gaat gebruiken, de methodes die je gebruikt en welke waardes ze teruggeven. (de interface dus, zoals al beschreven). OOP-kennis is zeker aan te raden hoewel het in Obj.C voor mij af en toe net lijkt alsof het iets nieuws is.

Ja die nib-files zijn een verhaal apart; die worden geinstantieerd wanneer je class geladen wordt, meestal een viewcontroller dus. die wordt (meestal) geladen vanuit je delegate. Je kan ook handmatig een nib-file (nib-files is de oude benaming voor xib-files maar men refereert altijd naar 'nib') laden, dat gaat dan meer in de trant van:

Citaat:

rootPilotVC = [[RootPilotViewController alloc] init];
rootSkillsVC = [[SkillTabVC alloc] initWithNibName:@"SkillTabView" bundle:nil];
Je nib-file bevat dus een viewcontroller die als class 'RootPilotViewController' heet. alle elementen in je xib-file worden dan ook geinstantieerd op het moment dat deze geladen wordt.

werken met views is ook een verhaal apart; ik moet zeggen ik ben er nu redelijk goed mee, maar 100% uit het hoofd lukt me nog niet, hoewel ik wel weet waar ik het moet zoeken wanneer het niet werkt ('Oh ja, moet hem wel even als subview aan mijn view toevoegen!').

MichMich 22-03-09 11:24

Precies! Dat heb ik hetzelfde... Helemaal uit mijn blote hoofd lukt het nog niet, maar fouten zijn wel zo opgespoord. Met andere woorden: De syntax is me nog niet helemaal eigen, maar de structuur wordt steeds duidelijker.

Ik moet zeggen dat je uitleg wel weer een extra verduidelijking biedt. Je bent duidelijk al een stapje verder. Misschien kan je daardoor ook in 'normaal nederlands' uitleggen wat een delegate nou precies doet. Ik heb wel een idee, maar zoek eigenlijk bevestiging... ;)

Bedankt voor je reacties zover!

Malork 22-03-09 17:31

Delegates zijn we inderdaad niet gewend in PHP, en ik moest er ook een tijdje over doen voor het kwartje valt, maar eigenlijk is het heel 'simpel'.

De meeste klasses in het framework hebben een aantal methodes; sommige van deze methodes worden automatisch aangeroepen wanneer een bepaalde actie uitgevoerd wordt. Deze delegate-methode kun je in je class overnemen waarna er je eigen acties aan toe kunt voegen.

Een voorbeeld: Stel, je wil de gebruiker een vraag stellen via een zogenaamde alert-sheet. dit doe je door middel van:

Citaat:

UIActionSheet* mijnSheet = [[UIActionSheet alloc] initWithTitle:@"zeker weten?"
delegate:self
cancelButtonTitle:@"Annuleren"
destructiveButtonTitle:@"All your base..."
otherButtonTitles:@"other button",@"other button 2",nil];
[mijnSheet showInView:self.view];
[mijnSheet release];
Je instantieert hier dus een UIActionSheet (dat is zo'n keuzescherm wat van onder naar boven uitgeklapt wordt). Je ziet hierin ook waar hij de delegate kan terugvinden. in dit geval 'self' want ik zet de delegate-methode in dezelfde class.

Wat is nu een delegate van deze UIAlertSheet? Nou, enkele delegate-methodes zijn:

Citaat:

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet { // before animation and showing view
... code ...
}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {

/* cancel button? */
if(buttonIndex == [actionSheet cancelButtonIndex]) {
[testLabel1 setText:@"cancel!"];
active = TRUE;
}

/* OK! button */
if(buttonIndex == [actionSheet destructiveButtonIndex]) {
[testLabel1 setText:@"BOOM!!!"];
active = TRUE;

}
}
Deze methodes worden automatisch door het systeem aangeroepen wanneer:

A: de methode "willPresentActionSheet" wordt aangeroepen door het systeem VOORDAT het UIAlertScreen getoond wordt. Je kan dus, door deze methode in je eigen class te implementeren, acties uitvoeren alvorens het scherm tevoorschijn komt.

B: de methode "void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex" wordt automatisch aangeroepen wanneer er een button is ingedrukt.

Deze methodes hoef je niet te implementeren maar het is natuurlijk wel aan te raden om ze te gebruiken.

Deze delegate-methodes vind je ook terug in XCode bij het frameworks ->UIKit.framework ->headers->UIAlert.h

Delegate-methodes kun je dus overnemen / implementeren in je eigen classes door ze te 'over-erven'. Standaard zal er gekeken worden of de delegate-methode(s) voor de desbetreffende actie in je class-file staan en dan worden ze uitgevoerd...

Hopelijk was het een beetje duidelijk...mocht het niet duidelijk zijn laat het me maar weten dan doe ik mijn best om het te verduidelijken. (zo, wat een zin haha!)

P-development 23-03-09 09:26

Belangrijk aan bovenstaande is dat je uiteraard ook in je eigen classes delegates kunt implementeren, om bepaalde zaken bijvoorbeeld event-driven uit te kunnen voeren in aparte threads.

Malork 23-03-09 10:03

Citaat:

Oorspronkelijk geplaatst door P-development (Bericht 269773)
Belangrijk aan bovenstaande is dat je uiteraard ook in je eigen classes delegates kunt implementeren, om bepaalde zaken bijvoorbeeld event-driven uit te kunnen voeren in aparte threads.

psies; volgens mij moet je dan die 'self' wijzigen in het object van je class. heb het nog niet geprobeerd maar zou theoretisch zo moeten werken.

MichMich 23-03-09 16:25

Het kwartje is nog niet helemaal gevallen, maar ik duik er even wat verder in... Bedankt voor jullie input zover! :)

jonathan 23-03-09 18:21

Ik ga binnenkort hetzelfde traject volgen: ik ken al OOP en MVC in PHP (nou ja, OOP en MVC zijn universeel), en wil ook Objective-C leren. Hoe lang hebben jullie erover gedaan om het een beetje te snappen? Dat je bijvoorbeeld een "Hello World"-applicatie kan maken?

ideveloper 23-03-09 20:29

Citaat:

Oorspronkelijk geplaatst door jonathan (Bericht 269941)
Ik ga binnenkort hetzelfde traject volgen: ik ken al OOP en MVC in PHP (nou ja, OOP en MVC zijn universeel), en wil ook Objective-C leren. Hoe lang hebben jullie erover gedaan om het een beetje te snappen? Dat je bijvoorbeeld een "Hello World"-applicatie kan maken?

Als je er even voor gaat zitten gaat hello world binnen een avondje lukken.

MichMich 23-03-09 20:31

Maar om vanaf daar door te gaan is juist de uitdaging! ;)

Thaurin 24-03-09 16:30

Ik moet zeggen dat "Hello, world" in Cocoa Touch nog redelijk complex was voor mij. Je moet weten hoe NIB files laden, hoe de NIB files worden gechained, wat File's Owner is en hoe controller classes erin worden geschoven bij het laden, hoe je connecties legt tussen controller en view en waarom, plus de nodige Objective-C syntax. Een hoop zal wel werken zonder veel van deze kennis, maar dan snap je ook niet goed wat er nou precies gebeurt.

Malork 24-03-09 19:09

precies wat Thaurin zegt; een 'hello world' heb je al snel..maar er is geen bal aan als je niet weet wat je doet. In het begin vond ik veel van deze tutorials online met
"klik hier, tiep dat..sleep dat..." maar WAAROM werd er niet bijgezegd..zo leer je het dus niet.

Het is vooral veel spelen; aanpassen en kijken wat er gebeurt.. small babysteps at a time...

edward007 27-04-09 14:40

Aanmelden als developper
 
Ik ben ook gevorderd in PHP, maar Objective-C is mij vooralsnog nog een raadsel.. Binnenkort maar eens een boek kopen!

libia 28-04-09 09:54

Ik kom ook van PHP ik heb echter geen mac, ik programmeer dus zonder xcode en zonder interfacebuilder. Ik programmeer dus ook zonder nib/xib files.

Objective-C zelf vind ik niet zo moeilijk, waar voor mij vooral het probleem ligt/lag is dat er nergens uitleg te vinden is waar ze geen gebruik maken van interfacebuilder!
Ondertussen heb ik mezelf aangeleerd om de headerfiles te doorzoeken naar antwoorden (methods die mogelijk doe wat ik wil). En bij apple geven ze over die headerfiles meestal ook nog een korte uitleg.

Thaurin 28-04-09 10:02

Header files doorlezen is zeker aan te raden, maar je kunt ook gewoon de class reference guides van Apple lezen. Daaruit krijg je meestal een aardig idee van hoe een class werkt. Verder kun je programmatisch alles doen wat IB ook kan en soms is het de enige mogelijkheid (als je tijdens run-time pas weet wat je toe wil voegen). Informatie over hoe dat moet zou dus gewoon te vinden moeten zijn.

libia 28-04-09 10:24

Citaat:

Oorspronkelijk geplaatst door Thaurin (Bericht 281604)
Header files doorlezen is zeker aan te raden, maar je kunt ook gewoon de class reference guides van Apple lezen. Daaruit krijg je meestal een aardig idee van hoe een class werkt. Verder kun je programmatisch alles doen wat IB ook kan en soms is het de enige mogelijkheid (als je tijdens run-time pas weet wat je toe wil voegen). Informatie over hoe dat moet zou dus gewoon te vinden moeten zijn.

Ja, class reference van apple die bedoelde ik idd!
Als jij veel tuts kan vinden die bijvoorbeeld uitleggen hoe je in code een UITable maakt, dan vind ik dat knap ;)

Thaurin 28-04-09 10:35

Hmmm, voordat de SDK werd gereleased was er natuurlijk al een levendige (unofficial) scene. Je moet die old-school gasten te pakken krijgen. ;) Er is ook tenminste één boek uitgebracht over de open toolchain, genaamd iPhone Open Application Development van Jonathan A. Zdziarski. Probeer 't daar eens!

libia 30-04-09 12:33

Citaat:

Oorspronkelijk geplaatst door Thaurin (Bericht 281613)
Hmmm, voordat de SDK werd gereleased was er natuurlijk al een levendige (unofficial) scene. Je moet die old-school gasten te pakken krijgen. ;) Er is ook tenminste één boek uitgebracht over de open toolchain, genaamd iPhone Open Application Development van Jonathan A. Zdziarski. Probeer 't daar eens!

dat boek is volgens mij geschreven voor 1.* niet voor 2.* ;) (ik had een keer een stukje code van een online versie van dat boek gebruikt, maar dat werkte niet :) )
en daarnaast houd ik niet zo van programmeer boeken


Alle tijden zijn GMT +2. Het is nu 19:56.