Domanda

Ho bisogno di un buon vecchio stile serie 2-dimensionale di interi nel mio programma, ma non importa come provo a dichiararla come un Ivar, e quindi utilizzare @ proprietà / @ sintetizzare, ricevo una lamentela compilatore o un altro.

Dichiaro

int spotLocations[10] [10] 

come un Ivar.

che gran parte opere, ma poi il processo di sintetizzare proprietà / @ @ non passa l'esame.

È stato utile?

Soluzione

Non si può fare questo. Array variabless può mai essere lvalue a C, il che significa che non si può mai dichiarare una funzione che restituisce un array, perché sarebbe impossibile assegnare il risultato della funzione di una variabile di matrice (in quanto non può essere un lvalue).

Proprietà sono solo un modo veloce di dichiarare una funzione che restituisce un tipo. Dal momento che le funzioni possono non tornare mai più gli array, non si può mai dichiarare una proprietà che è un array.

Se è assolutamente necessario spostare matrici in giro come questo, si potrebbe avvolgere in una struttura, che può essere lvalue:

typedef struct {
  int value[10][10];
} matrix;

...

@property matrix spotLocations;

Naturalmente, l'accesso alle posizioni è un po 'più complicata, è necessario utilizzare

spotLocations.value[x][y]

Altri suggerimenti

Dichiarare la variabile di istanza come un puntatore e quindi creare dinamicamente l'array nel metodo init. Utilizzare il parametro di assegnazione per la dichiarazione @property.

Allocation:

spotLocations = malloc(100 * sizeof(int));

Accedere a una colonna e riga facendo:

int aValue = spotLocations[x + y * 10];

Ricordate di liberare () il puntatore quando hai finito con esso.

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