bug UISharedApplication che non può essere determinato
-
22-09-2019 - |
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.
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
.