Pergunta

Desejo fazer um seletor de cidade/país usando 2 nspopupButtons. Um botão pop -up conterá a primeira parte, por exemplo, o Reino Unido, e o segundo conterá a segunda parte, por exemplo, Londres, para que a combinação inteira da cidade/país leia: Reino Unido Londres No entanto, quero que a segunda parte seja atualizada quando a primeira parte for selecionada , por exemplo, se Londres for selecionado, as possíveis opções no segundo pop -upbutton serão Londres, Birmingham, Manchester etc., enquanto se a Itália foi escolhida, o segundo popupton exibirá países como Veneza, Milão etc.

Depois, gostaria de armazenar esses dados em um atributo nos dados principais. Então, para se juntar aos dois e armazenar "Londres do Reino Unido" em um atributo chamado "Place".

Alguém poderia me dar alguma ajuda sobre como implementar isso, por favor?

Obrigada!

Foi útil?

Solução

Como você tem seus dados de país / cidade armazenados (eles também estão em dados principais)? Isso determinará alguns dos detalhes aqui, mas a idéia básica é que você use ligações de cacau para vincular cada NSPOPUPBOTON ao conteúdo de um NSARRAYController.

Cocos ligações Não são terrivelmente simples, mas eles realmente funcionam como mágica quando você configura tudo corretamente. O problema é que, quando você não tem coisas configuradas corretamente, é difícil determinar o que está dando errado.

Aqui está a configuração geral:

Você configura o primeiro NSARRAYController para ser o conteúdo dos dados do seu país. Se você usa dados principais, passa o contexto de objeto gerenciado e prepare seus próprios dados para o seu Country entidade. Caso contrário, você terá que vincular seu conteúdo a uma variedade existente de objetos que implementam um Codificação-chave compatível com codificação Método para acessar suas cidades vinculadas. O uso de dados principais da fonte de dados aqui facilitará sua vida.

E então você vincula o segundo NSArrayController ao seu conteúdo do selection do primeiro, com o caminho -chave apropriado para suas cidades. Com os dados principais, este será o Content Set (já que não é ordenado).


Editar: Bah, os campos de comentários são completamente inúteis. Aqui está uma resposta adequada ao seu primeiro comentário:

Para modelar esse relacionamento nos dados principais, você configuraria seu modelo para ficar assim:

Xcode Model Editor Screenshot

É importante observar que eu dei a minhas entidades aulas personalizadas (MBCountry e MBCity). Ao pedir ao Xcode para gerar as classes para você (selecione a entidade, vá para o novo arquivo ... e escolha aula de cacau -> Classe de objeto gerenciado), você pode usar métodos de acessórios reais (em vez de apenas valueForKey:). (Como um aparte, eu realmente valorizo Mogerator de Rentzsch Isso faz isso automaticamente para você em todos os salvamentos.)

Agora que seu modelo está configurado, você pode preencher o armazenamento de dados assim:

NSArray *countryList = ...; /* Get your array of country names */
for (NSString *countryName in countryList) {
    MBCountry *aCountry = (MBCountry *)[NSEntityDescription insertNewObjectForEntityForName:@"MBCountry" inManagedObjectContext:context];
    [aCountry setName:countryName];
    NSArray *cityList = ... /* Get your array of city names for this country */
    for (NSString *cityName in cityList) {
        MBCity *aCity = (MBCity *)[NSEntityDescription insertNewObjectForEntityForName:@"MBCity" inManagedObjectContext:context];
        [aCity setName:cityName];
        [aCountry addCitiesObject:aCity];
    }
}

Os dados principais realmente são caminho exagero aqui. No entanto, parece que você deseja usar dados principais em outras seções do seu programa, portanto, isso contribui para uma ótima oportunidade de aprendizado. Ele tem uma curva de aprendizado muito íngreme (certamente um dos aspectos mais complicados da API do cacau), mas é factível. Apenas continue se afastando!

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