Atualizando uma variável no AppDelegate
-
19-09-2019 - |
Pergunta
No delegado do aplicativo, criei uma matriz para vários controladores de exibição referenciarem. No entanto, quando tento atualizar a matriz em uma visão, ela fica vazia na outra.
Exibir 1:
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
dataTempForSearch = appDelegate.myData;
Eu tenho então um analisador XML que insere um objeto na matriz.
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"CompanyName"]) {
// save values to an item, then store that item into the array...
[item setObject:currentTitle forKey:@"title"];
[item setObject:currentAddress forKey:@"address"];
[item setObject:currentCity forKey:@"city"];
[item setObject:currentCountry forKey:@"country"];
[dataTempForSearch addObject:[item copy]];
}
}
Isso retorna tudo bem à vista 1, mas em vista 2 eu tenho:
- (void)viewDidLoad {
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
dataTempForMap = appDelegate.myData;
NSLog(@"myData appDelegate from: %@", dataTempForMap);
}
Quando esta segunda visão é carregada, o dataTempForMap
Retorna uma matriz vazia.
Solução
É possível que você esteja reinicializando a matriz sobre a população original. Eu colocaria um ponto de interrupção no local onde você está fazendo
myData = [[NSMutableArray alloc] init];E veja se está sendo chamado com mais frequência do que você pensou.
Outras dicas
Suspeito que você não tenha inicializado a matriz MyData no delegado. Você deveria estar ligando
[[NSMutableArray alloc]init];
na tua
- (void)applicationDidFinishLaunching:(UIApplication *)application {
método. Caso contrário, o ponteiro que você está voltando do delegado não está apontando para uma instância de NSMutableArray
Eu verificaria com o depurador se você não está recuperando o NIL e que está recebendo o mesmo endereço de volta. Se qualquer um desses não for verdade, suspeito que a ordem em que as coisas estão acontecendo é o problema