Problem med Cocoa...

Tråden skapades och har fått 6 svar. Det senaste inlägget skrevs .
1

Jag läser Learning Cocoa och har stött på något problem...

Jag hörde att Learning Cocoa skulle vara ganska full av buggar så jag har jämfört min kod med den kod man kan ladda hem från nätet (som jag vet går att kompilera). Uppgiften i fråga är kap 9: Expenses (dvs del 2 av kapitlet), om någon av er har kollat i boken.

Hur som, här är problemet. Jag kan utan problem kompilera mitt program, men när programmet körs får jag följande meddelande:

2002-01-16 13:04:32.460 Expenses[15856] An uncaught exception was raised
2002-01-16 13:04:32.469 Expenses[15856] [<Expense 0x22db80> valueForKey:]: lookup of unknown key: ´(null)´.
This class does not have an instance variable of the name (null) or _(null), nor a method of the name (null), _(null), get(null), or _get(null)
2002-01-16 13:04:32.469 Expenses[15856] *** Uncaught exception: <NSUnknownKeyException> [<Expense 0x22db80> valueForKey:]: lookup of unknown key: ´(null)´.
This class does not have an instance variable of the name (null) or _(null), nor a method of the name (null), _(null), get(null), or _get(null)

Expenses.app has exited with status 255.

Jag har inte greppat felsökningen än, men om någon av er kan hjälpa mig, eller förstår varför min kod ger detta meddelande, när den nerladdade koden, som ser likadan ut (i alla fall klasserna och main-filen),
inte ger det, skulle jag bli väldigt glad...

Jag kan självklart komplettera detta inlägg med andra delar av koden om det skulle hjälpa. Jag är som sagt nybakad på det här så jag följer eventuella instruktioner.

Tack på förhand

/Jont Olof : :eek:

[ 16-01-2002: Meddelandet ändrat av: Jont Olof ]

  • Oregistrerad
  • 2002-01-18 02:09

Jag har inte boken, men den är juh skriven för obj.c vad jag vet, men felen ser mer ut som java fel, använder du java? Hmm annars så kanske det är cocoa som använder java någon stans(härlig java brygga de använder förövrigt) för try & catch finns i java men inte i obj.c vad jag vet och tror dinna fel beror på det, kör du java så kan du juh köra koden
try
{
<din kod>
}
catch(Exception e)
{}
och se om det fungerar

Jag har skrivit alltihop i Objectiv-C. Så något fel med Javakod verkar konstigt. Eller? Men jag försöker lära mig Java också, så min fråga blir då exakt hur och var skriver jag det du ovan nämnde om jag arbetar med Project Builder?

Jont Olof
______________________________________________

Newbie. På väg uppåt!? Ständigt med nya progg-problem...

  • Oregistrerad
  • 2002-01-18 13:48

I cocoa verkar mycket kod vara integrerat med båda obj.c och java, men jag trodde det var mer så att java-cocoa använde sig av obj.c o inte tvärrt om men man vet aldrig

Det ovan fungerar på detta viset, tex du har en metod döpt htmlParser()

som ska använda sig av en kod som kräver att man fångar eventuella exception då måste du skriva denna kod innanför try{}
Sen om det skulle uppstå något fel i koden så kommer try anropa sin exception där under och skickar med en referens till felet. Pröva ta detta

public void htmlParser(String text)
try
{
int[] k = new int[2];
k[0] = 10;
k[1] = 0;
System.out.println(k[50]);
<annan kod>
}
catch(Exception e)
{
System..out.println(e);
}
<annan kod>
}

Jag lyckades inte köra din try-kod. Tror mig dock ha lyckats lokalisera felet.
Här följer en metod för att generera testadata till en tabell. Den fetstilta raden genererar den varning som följer efter koden:

- (NSMutableArray *)generateTestData {

NSMutableArray *array = [NSMutableArray array];
int index;

for(index = 1; index < 16; index++) {
Expense *exp = [[Expense alloc] init];
[exp setAmount: [NSDecimalNumber numberWithInt :(index)]];
[array addObject: exp];
[exp release];
}
return array;
}

Kompilering ger följande varning till fetstilt text ovan:
Warning: passing arg 1 of `setAmount:´ from incompatible pointer type

Jag går bet på vad det kan vara...

/Jont Olof

[ 20-01-2002: Meddelandet ändrat av: Jont Olof ]

  • Medlem
  • International user
  • 2002-01-20 16:55

Hur ser prototypen ut för setAmount: i klassen Expense? För att det här ska fungera så borde den se ut så här:

- (void)setAmount: (NSDecimalNumber*)aNumber

eller om du vill vara flexiblare, men då måste du tänka lite mer senare..

- (void)setAmount: (id)aWhatever

[ 20-01-2002: Meddelandet ändrat av: kent ]

Jag har lagt det här problemet på hyllan tills vidare. Har fått en ny bok som kanske reder ut begreppen...

Tack ändå!

/JO

1
Bevaka tråden