Frågor Objective-C och Stanford kurs

Tråden skapades och har fått 15 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Hässleholm
  • 2009-05-29 11:26

Hej! Jag håller på att lära mig iPhone-programmering genom att följa den gratis distanskurs som universitetet Stanford har.

Är det fler som följer den kursen? Hade varit bra att kunna diskutera. Jag är på uppgifterna för lektion 2 så om någon vill börja kanske jag kan hjälpa till med uppgifterna för 1A och 1 B.

Sedan undrar jag också om init-metoden i Object-C är som en konstruktor i C#?

  • Medlem
  • Älmhult
  • 2009-07-07 22:21

Hej!

Jag är helt nybörjare på det här så det skulle vara jätteskönt att diskutera med någon!
Jag är just nu grymt frustrerar på att jag inte förstår mig på hjälpfilen, hur man läser den.

Så om du skulle vilja posta .m -filen till uppgift "WhatATool". Det skulle vara grymt användbart så kan jag se hur det är tänkt att man ska läsa hjälpfilen.

Ursprungligen av larsp777:

Sedan undrar jag också om init-metoden i Object-C är som en konstruktor i C#?

Nej. Init är som vilken metod som helst. Objective-C har inga konstruktorer som du kan vara van vid från t. ex. Java och C#. Det är däremot en konvention att man börjar namnen på metoder med motsvarande ansvar med init.

  • Medlem
  • Hässleholm
  • 2009-07-07 23:18

Jag ska gärna posta koden men det får bli lite senare, troligen imorgon.

  • Medlem
  • Älmhult
  • 2009-07-07 23:39
Ursprungligen av larsp777:

Jag ska gärna posta koden men det får bli lite senare, troligen imorgon.

Tack så mycket! Då går jag och lägger mig för dagen

  • Medlem
  • Hässleholm
  • 2009-07-08 15:01

Här är koden
#import <Foundation/Foundation.h>
#import "PolygonShape.h"

// Sample function for one section, use a similar function per section
void PrintPathInfo() {

NSLog(@ "Uppgift 1B Sektion 1: ");
NSLog(@);

NSString *path = @"~";
path = [path stringByExpandingTildeInPath]; //Omvandlar relativa sökvägen tilde till absolut sökväg.
NSLog(@"My home folder is at %@", path);
NSArray *pathComponents = [path pathComponents]; //Plockar ut komponenterna som ingår i sökvägen och lägger dom i en array.

for(NSString *path in pathComponents){ //Plockar ut varje del i arrayen.686989<ol>
NSLog([path description]);
}

}

void PrintProcessInfo() {

NSLog(@ "Uppgift 1B Sektion 2: ");
NSLog(@);

NSString *processName = [[NSProcessInfo processInfo] processName];
NSString *processId = [NSString stringWithFormat:@"%d",[[NSProcessInfo processInfo] processIdentifier]];

NSLog(@"Process name: %@ Process id: %@", processName, processId);

}

void PrintBookmarkInfo() {

NSLog(@ "Uppgift 1B Sektion 3: ");
NSLog(@);

NSDictionary *URLdictionary = [NSDictionary dictionaryWithObjectsAndKeys:
[NSURL URLWithString: @"http://www.stanford.edu"], @Stanford University, //URLWithString är en klassmetod, inte instansmetod.
[NSURL URLWithString: @"http://www.apple.com"], @Apple,
[NSURL URLWithString: @"http:/cs193p.stanford.edu"], @CS193P,
[NSURL URLWithString: @"http://itunes.stanford.edu"], @Stanford on iTunes U,
[NSURL URLWithString: @"http://stanfordshop.com"], @"stanfordshop.com",
nil];

for (id key in URLdictionary) {
if ([key hasPrefix:@Stanford])
NSLog(@"Key: %@ URL: %@", key, [URLdictionary objectForKey:key]);
}
}

void PrintIntrospectionInfo() {



NSURL *anURLobject =[NSURL URLWithString: @"http://www.stanford.edu"];
NSDictionary *URLdictionary = [NSDictionary dictionaryWithObjectsAndKeys:
[NSURL URLWithString: @"http://www.stanford.edu"], @Stanford University, //URLWithString är en klassmetod, inte instansmetod.
[NSURL URLWithString: @"http://www.apple.com"], @Apple,
[NSURL URLWithString: @"http:/cs193p.stanford.edu"], @CS193P,
[NSURL URLWithString: @"http://itunes.stanford.edu"], @Stanford on iTunes U,
[NSURL URLWithString: @"http://stanfordshop.com"], @"stanfordshop.com",
nil];
NSString *aString = @Hejsan;

NSMutableArray *array = [NSMutableArray array];
[array addObject:anURLobject];
[array addObject:URLdictionary];
[array addObject:aString];

//NSLog ([URLdictionary description]);

for (id test in array) {
NSLog(@"Class name: %@", [test className]); //Klassnamn

if ([test isMemberOfClass:[NSString class]])
NSLog(@"Is member of NSString: YES");
else
NSLog(@"Is member, of NSString: NO");

if ([test isKindOfClass:[NSString class]]) //Är det denna sortens klass?
NSLog(@"Is Kind of NSString: YES");
else
NSLog(@"Is Kind of NSString: NO");

if ([test respondsToSelector: @selector (lowercaseString)]) {
NSLog(@"Responds to lowercaseString: YES");
NSString *lowCase = [test lowercaseString];
NSLog(@"lowercaseString is: %@", lowCase);
}
else
NSLog(@"Responds to lowercaseString: NO");


NSLog(@"***************************************************");
}


}

void PrintPolygonInfo() {

NSMutableArray *shapes = [[NSMutableArray alloc] init];
PolygonShape *shape4 = [[PolygonShape alloc] initWithNumberOfSides:8 minimumNumberOfSides:2 maximumNumberOfSides:10];
NSLog(@"Shape4's retain count = %d", [shape4 retainCount]); // retain count = 1
[shapes addObject:shape4];
NSLog(@"%@",shape4);
NSLog(@"Shape4's retain count = %d", [shape4 retainCount]); // retain count = 2
[shape4 release];
NSLog(@"Shape4's retain count = %d", [shape4 retainCount]);
//[shape4 release];

}

int main (int argc, const char * argv[]) {
//#import "PylogonShape.h"

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

PrintPathInfo(); // Section 1
NSLog(@);
NSLog(@);
PrintProcessInfo(); // Section 2
NSLog(@);
NSLog(@);
PrintBookmarkInfo(); // Section 3
NSLog(@);
NSLog(@);
PrintIntrospectionInfo(); // Section 4
NSLog(@);
NSLog(@);
PrintPolygonInfo(); // Section 6
NSLog(@);
NSLog(@);


[pool release];
return 0;
}

  • Medlem
  • Hässleholm
  • 2009-07-08 18:59

Hoppas att du får hjälp av koden. Tänkt på att jag kommenterat om du kopierar den rakt av. Har nog smugit sig in lite tecken som inte hör det också.

Bara fråga om det är något så ska jag försöka svara.

Jag tyckte verkligen inte det var lätt i början och är fortfarande svårt, även om det går lättare.

Är snart klar med 2B.

  • Medlem
  • Älmhult
  • 2009-07-08 23:15
Ursprungligen av larsp777:

Hoppas att du får hjälp av koden. Tänkt på att jag kommenterat om du kopierar den rakt av. Har nog smugit sig in lite tecken som inte hör det också.

Bara fråga om det är något så ska jag försöka svara.

Jag tyckte verkligen inte det var lätt i början och är fortfarande svårt, även om det går lättare.

Är snart klar med 2B.

tack så mycket!
jag kommer inte att kopiera koden rakt av utan jag tycker det är extremt hjälpsamt att kunna se hur det ska se ut.

  • Medlem
  • Älmhult
  • 2009-07-09 00:39

Vet inte om det är en bugg eller hur jag lyckades med om man skriver såhär på sektion 2 i uppgift 1b:

NSString *processName;
processName = [[NSProcessInfo processInfo] processName];
NSLog(@"Process Name: %@ Process Id: %d", processName, processName);

Alltså först %@ som skriver ut den första variabeln och sedan %d för den andra, fast det är samma varabelnamn (processName) så skrivs det ut:

Process Name: WhatATool Process Id: 1077072

i konsollen. Skumt?

Fråga: Är det alltid så att man ska ha %d om det är siffror och %@ om det ska stå som text?

  • Medlem
  • Älmhult
  • 2009-07-09 01:00
Ursprungligen av myraz:

Vet inte om det är en bugg eller hur jag lyckades med om man skriver såhär på sektion 2 i uppgift 1b:

NSString *processName;
processName = [[NSProcessInfo processInfo] processName];
NSLog(@"Process Name: %@ Process Id: %d", processName, processName);

Alltså först %@ som skriver ut den första variabeln och sedan %d för den andra, fast det är samma varabelnamn (processName) så skrivs det ut:

Process Name: WhatATool Process Id: 1077072

i konsollen. Skumt?

Fråga: Är det alltid så att man ska ha %d om det är siffror och %@ om det ska stå som text?

Jag svarar på min egen fråga istället för att bara ta bort den.

När jag istället skriver ut en NSString som inehåller "[[NSProcessInfo processInfo]processIdentifier]" så får jag ett vettigare processId.

Det som skrevs ut innan är troligen då bara en nummeröversättning till "WhatATool"?

Ursprungligen av myraz:

Fråga: Är det alltid så att man ska ha %d om det är siffror och %@ om det ska stå som text?

Lite format:
%@ - Objekt
%d - Heltal
%f - Flyttal
%x - Hexadecimalt
%c - Character
%s - C-sträng (char-star)

Skriver du "a.b" mellan % och formatbokstaven, där a och b är heltal, kan du bestämma hur mycket plats på raden värdet tar (a) respektive hur många siffror som skrivs ut (b).

Mer om NSLog().
CocoaDev: NSLog

  • Medlem
  • Älmhult
  • 2009-07-09 15:24
Ursprungligen av marcushedenstrom:

Lite format:
%@ - Objekt
%d - Heltal
%f - Flyttal
%x - Hexadecimalt
%c - Character
%s - C-sträng (char-star)

Skriver du "a.b" mellan % och formatbokstaven, där a och b är heltal, kan du bestämma hur mycket plats på raden värdet tar (a) respektive hur många siffror som skrivs ut (b).

Mer om NSLog().
CocoaDev: NSLog

Aha, tack för infon! Ska kolla lite på cocoadev också. Verkar vara en bra sida!

processName är en pekare till ett objekt. När du formatterar det med %d får du minnesadressen för objektet, vilket sannolikt inte är vad du vill.

  • Medlem
  • Älmhult
  • 2009-07-09 11:50
Ursprungligen av Erik Aderstedt:

processName är en pekare till ett objekt. När du formatterar det med %d får du minnesadressen för objektet, vilket sannolikt inte är vad du vill.

Aha, i see!
Är det alltid så att om man formaterar med %d så får man minnesadressen?
Helt rätt är det att det var inte det jag ville

Ursprungligen av myraz:

Aha, i see!
Är det alltid så att om man formaterar med %d så får man minnesadressen?
Helt rätt är det att det var inte det jag ville

För minnesadresser brukar jag använda %p.

NSLog(@"%p", object);

Då får man det hexadecimalt.

Skriver du @"%.8p" som formatsträng får du hela 32-bitarsadressen.

Med %d får du variabelns innehåll i heltalsformat. Om variabeln är en pekare är det adressen till det objekt den pekar på (eller delar av adressen); om variabeln är ett flyttal får du ut en heltals-tolkning av flyttalets data (vilket inte innebär en avrundning). Räkna inte med att få ett vettigt värde om du inte skriver ut ett heltal.

1
Bevaka tråden