Question

Je souhaite faire une sélection ville / pays en utilisant 2 NSPopupButtons. Un bouton contextuel contiendra la première partie, par exemple Royaume-Uni, et la seconde contiendra la deuxième partie, par exemple Londres Ainsi, toute la ville / combo pays lire: UK Londres cependant, je veux la seconde partie à mettre à jour lorsque la première partie est choisi, par exemple, si Londres est sélectionné, les choix possibles dans la deuxième PopUpButton seront Londres, Birmingham, Manchester, etc., tandis que si l'Italie a été choisi, le deuxième PopUpButton affiche des pays tels que Venise, Milan, etc.

Ensuite, je voudrais stocker ces données dans un attribut de base de données. pour ainsi rejoindre les deux ensemble, et le magasin « UK Londres » dans un attribut appelé « lieu ».

Quelqu'un pourrait me donner une aide quant à la façon de mettre en œuvre cette s'il vous plaît?

Merci!

Était-ce utile?

La solution

Comment avez-vous votre pays / données stockées ville (sont-ils aussi dans Core Data)? Qui déterminera certains détails, mais l'idée de base est que vous utilisez des liaisons Cocoa pour relier chaque NSPopUpButton au contenu d'un NSArrayController.

Cocoa ne sont pas Manchettes terriblement simple, mais ils fonctionnent vraiment comme par magie une fois que vous obtenez tout configuré correctement. Le problème est que lorsque vous, ce n'est pas correctement configuré avez des choses difficiles à déterminer ce qui va mal.

Voici la configuration générale:

Vous configurez le premier NSArrayController être le contenu de vos données Pays. Si vous utilisez des données de base, alors vous transmettre le contexte de l'objet géré et avoir préparer ses propres données pour votre entité Country. Dans le cas contraire, vous devrez lier son contenu à un tableau existant d'objets qui mettent en œuvre un

Il est important de noter que j'ai donné mes entités personnalisées des classes (MBCountry et MBCity). En demandant Xcode pour générer les classes pour vous (sélectionnez l'entité, allez au nouveau fichier ... et choisissez la classe Cocoa -> classe d'objets gérés), vous pouvez utiliser des méthodes réelles accesseurs (au lieu d'valueForKey:). (En aparté, j'apprécie vraiment Mogenerator de Rentzsch qui fait automatiquement pour vous à chaque enregistrement.)

Maintenant que votre modèle est configuré, vous pouvez remplir le magasin de données comme ceci:

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];
    }
}

Core Data est vraiment chemin ici surpuissant. Cependant, il semble que vous voulez utiliser les données de base dans d'autres sections de votre programme, donc ceci en fait une excellente occasion d'apprentissage. Il a une courbe d'apprentissage très raide (certainement l'un des aspects les plus délicats de l'API Cocoa), mais il est faisable. Il suffit de garder à trimer!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top