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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top