Domanda

-(void) setupMyLocation {

NSArray *viewControllerArray = [navigationUpdateFromDetail.navigationController viewControllers];
NSUInteger parentViewControllerIndex = [viewControllerArray count] - 2;
NSLog(@"Parent view controller: %@", [viewControllerArray objectAtIndex:parentViewControllerIndex]);

switch(parentViewControllerIndex){
    case 0:

    self.myLocation = navigationUpdateFromDetail.currentLocation;
        break;
    case 1:
        YANAVAppDelegate *currentObject = (YANAVAppDelegate*)[[UIApplication sharedApplication]delegate];

    //  self.myLocation = currentObject.givenLocation;

        break;
    default: break;
}

}       

Non riesco a capire il motivo per cui continuo a ricevere un errore "in attesa di espressione prima YANAVAppdelegate".

Non riesco a mettere il dito sul perché questo non verrà compilato. qualsiasi ingresso è apprezzato .. grazie in anticipo.

È stato utile?

Soluzione

Non definire la variabile (currentObject) all'interno della istruzione switch.

Altri suggerimenti

Se è necessario definire una variabile all'interno di un'istruzione caso, è possibile farlo utilizzando le parentesi graffe (questa tecnica funziona anche in C ++, tra l'altro):

-(void) setupMyLocation {

    NSArray *viewControllerArray = [navigationUpdateFromDetail.navigationController viewControllers];
    NSUInteger parentViewControllerIndex = [viewControllerArray count] - 2;
    NSLog(@"Parent view controller: %@", [viewControllerArray objectAtIndex:parentViewControllerIndex]);

    switch(parentViewControllerIndex) {
        case 0:
            self.myLocation = navigationUpdateFromDetail.currentLocation;
            break;

        case 1:
        {
            YANAVAppDelegate *currentObject = (YANAVAppDelegate*)[[UIApplication sharedApplication]delegate];

        //  self.myLocation = currentObject.givenLocation;

            break;
        }

        default: 
            break;
    }
}       

A C ++ Guru mi ha spiegato una volta che questo dà le variabili una pila contesto per loro di esistere, che l'istruzione switch / caso non fornisce automaticamente. Ricordarsi di cancellare / oggetti di rilascio se si crea alcuna in quel contesto, altrimenti è un modo semplice per avere una perdita di memoria.

Io personalmente uso sempre parentesi graffe nel mio caso le dichiarazioni, se mi chiedete;) non si sa mai se in futuro avrete bisogno di loro, rende le cose più facili da capire

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