Domanda

Ho un sacco di esperienza con Java e C ++ di sviluppo, in modo da classi e astrazione dei dati è abbastanza facile per me. Ho iniziato unico obiettivo C a poco tempo fa, e mi è stato in gran parte lavorando con in globali di classe, e tutto procedeva senza intoppi. Ho appena deciso di astrarre una gran parte del mio codice, nel tentativo di rendere meno spaghetti code, e mi ha colpito un problema che io non sono stato in grado di superare da Sabato.

Outline:

Sto facendo un gioco di carte da gioco. Recentemente ho Sottratto i dati della carta in una classe che contiene 3 variabili; (Int) i_cardValue, (int) i_cardSuit, e (UIImage *) uii_cardImage. Creo una carta chiamando

-(PlayingCard *)initWithValue:(int)i_initValue suit:(int)i_initSuit image:(UIIMage*)uii_initImage {

     [self setCardValue:i_initValue];

     [self setCardSuit:i_initSuit];

     [self setCardImage:i_initImage];

     return self;

}

Ho anche Sottratto la parte del motore (fondamentalmente funzioni della piattaforma, come il riordino e la direzione ponte). Il ponte è una matrice mutevole, e ho una funzione di ponte init.

NSMutableArray *nsma_deck;
-(void)initDeck {
     nsma_deck = [[NSMutableArray alloc] initWithCapacity:52];
}

Ora, a mio controller della vista, faccio una chiamata a initDeck, poi aggiungo elementi da ponte con una linea come

[pce_Engine initDeck];
[[pce_Engine nsma_deck] addObject:[[PlayingCard alloc] initWithValue:13 suit:2 image:[UIImage imageNamed:@"2C.png"]]];

pce_Engine è una variabile di tipo PlayingCardEngine. Ho messo linee NSLog nella initDeck, ed essi non vengono visualizzati nella console quando ho eseguito il mio programma. Sono non essere chiamati, in modo da ottenere la matrice isnt alloced, e quindi io posso aggiungere roba alla matrice? Ho pensato che ho fatto questo va bene, ma in entrambi im facendo male o im manca qualcosa, perché, aggiungendolo alla vista non ci arriva da visualizzare. L'utilizzo di un NSLog, il ponte == nil, quindi credo che il problema è che io non sono l'accesso alla piattaforma in modo corretto e quindi non l'aggiunta di valori e solo avere variabili vuote ovunque :(. Ho provato a guardare un sacco di tutorial per Objective C, ma non ho nemmeno trovato uno che astrae, per quanto mi accingo, quindi non sono stato in grado di trovare il mio problema.

Qualcuno mi può punto nella giusta direzione?

È stato utile?

Soluzione

Prima di tutto, sono d'accordo con Eimantas che il metodo init manca una chiamata a [super init] (il cui valore si dovrebbe torneremo, leggere su ciò che un metodo init normale assomiglia).

Ma per quanto riguarda l'init_deck - proprio quello che metodo nel controller di vista avete quelle due righe? Sto pensando che non è stato chiamato più in base a dove il codice chiamante è di ogni altra cosa (anche se pce_Engine può anche essere pari a zero quando il codice viene chiamato, nel qual caso non funzionerebbe affatto).

Altri suggerimenti

Presumo tua classe carta è una sottoclasse di NSObject nel qual caso è necessario implementare inizializzatore designato (init) che chiama [super init] e fa configurazione generica. E nel tuo initWith ... metodo si dovrebbe chiamare [self init] e poi fare l'assegnazione.

Ecco un buon post su cacao / Objective-C initializers: http://mikeash.com/?page=pyblog/the-how-and-why-of-cocoa-initializers.html

Lo stesso vale con classe per la gestione della piattaforma. Spero che questo aiuta a trovare il vostro problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top