2009-06-30 5 views
5

Desidero sapere come passare strutture a un'altra funzione e successivamente accedere a quella struttura nella funzione chiamata. Sto sviluppando per l'iPhone e il motivo che sto utilizzando le strutture è così che io possa finalmente passare i dati come le strutture a un server in costruzione in C.Strutture di accesso e accesso che utilizzano l'obiettivo-

Ecco la struttura:

struct userInfo{ 
    NSString *firstName; 
    NSString *lastName; 
    NSString *username; 
    NSString *email; 
    NSString *ipAddress; 
    double latitude; 
    double longitude; 
}; 

Here I 'm semplicemente andare a prendere alcuni dati degli utenti inputed insieme ad alcuni dati CoreLocation e l'indirizzo IP del iPhone:

- (IBAction)joinButton { 
    struct userInfo localUser; 

    localUser.firstName = firstName.text; 
    localUser.lastName = lastName.text; 
    localUser.username = username.text; 
    localUser.email = emailAddress.text; 
    localUser.ipAddress = localIPAddress.text; 
    localUser.latitude = currentLocation.coordinate.latitude; 
    localUser.longitude = currentLocation.coordinate.longitude; 

    [myNetworkConnection registerWithServer:&localUser]; 
} 

funzione di gestione della struct:

- (void)registerWithServer:(struct userInfo*)myUser { 

    printf("First name is: %s", myUser.firstName);//error when compiling 
} 

il compilatore genera questo errore: request for member 'firstName' in something not a structure or union. Quella struttura è fuori portata quando provo ad accedervi nella seconda funzione?

+0

Non c'è alcun motivo per inserire oggetti Objective-C all'interno delle strutture. Non farlo O costruisci un oggetto per contenere i tuoi dati, inseriscilo in un NSDictionary o converti tutto in tipi C nativi come char * per la tua struct. –

risposta

7

Si sta passando un puntatore a una struttura. Usa l'operatore ->, non il punto.

myUser->firstName 
+0

che emette 8a sulla console, che non è la stringa inserita. –

+0

Questo perché è una NSString, non una stringa C (char *). È possibile ottenere una stringa C con una copia dei contenuti di NSString utilizzando i metodi cStringUsingEncoding :, getCString: maxLength: encoding :, o UTF8String. L'ultimo potrebbe essere il più semplice: printf ("% s \ n", [myUser-> firstName UTF8String]); – mkb

+0

Per generare un NSString con printf(), devi convertirlo in un char * e usare l'identificatore di formato% s. Tuttavia, puoi utilizzare% @ con NSLog o con la tua variante. http://cocoaheads.byu.edu/wiki/a-different-nslog –

2

non posso fare a meno di pensare si dovrebbe davvero fare che un oggetto Objective-C corretta con proprietà - più lavoro, ma poi sarà tutto si comportano meglio e di vivere all'interno dell'ecosistema NSObject.

+0

giusto, e probabilmente ci arriveremo. ma in questo momento voglio sentirmi a mio agio nell'inviare una struct da iPhone a un server remoto. Immagino che in futuro questo sarà un oggetto e copierò le sue proprietà in una struttura da esportare. –

+0

Invece di scrivere un server C personalizzato che estrae una struttura binaria costruita su un'architettura completamente diversa dal codice del server, invece di costruire un semplice servizio web in stile REST in cui invece si passano nuovi dati come parametri ... questo renderà la vita lontano, molto più facile per te nel lungo periodo. Altrimenti iniziare a leggere su problemi di endian e come adattarsi a diverse dimensioni int in strutture ... –