2010-06-20 3 views
2

Déchirer mes cheveux en essayant d'obtenir le plus simple des tutoriels pour courir, du livre « Head First iPhone développement »UIPickerView Crashing App Lorsqu'il est connecté à la source de données/délégué

Avoir un UIPickerView qui est lié à un tableau d'objets. C'est tout. Il ne fait rien, tout ce que je veux faire (pour l'instant) est d'afficher ce qui est dans le tableau. J'ai suivi les étapes dans le livre mot à mot, et redémarré frais au moins 5 fois. Lors de ma dernière tentative, j'ai découvert comment déboguer et ajouter des points d'arrêt.

Ceci est aussi loin que l'application se

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ 
     return 1; 
} 

si je change cette ligne pour revenir 0; l'application se charge avec un UIPickerView vide. Si c'est un, l'application bombarde lorsqu'il est exécuté.

J'ai vérifié que le tableau existe et qu'il contient des données - avec picklist défini sur 0 composants, je peux retourner n'importe quelle ligne du tableau à une étiquette. Ce n'est que lorsque je transmets la sélection à la source de données/délégué à travers l'IB qu'elle bombarde. Vraiment à la fin de mon élan avec cela, j'ai essayé de le faire fonctionner pendant des semaines et à peu près prêt à lancer le macbook par la fenêtre et traquer Steve Jobs avec une arbalète. Je me sens particulièrement stupide que c'est le premier exemple dans le livre. Toute aide serait très appréciée.

MISE À JOUR:

Voici le code

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ 
    return 1; 
} 


- (NSInteger)pickerView:(UIPickerView *) pickerViewnumberOfRowsInComponent : 
    (NSInteger)component { 
    return [activities count]; 
} 


- (NSString *)pickerView:(UIPickerView *) titleForRow:(NSInteger)row forComponent:(NSInteger)component{ 
    return [activities objectAtIndex:row]; 
} 

J'ai juste essayé d'insérer un espace dans 'pickerViewnumberOfRowsInComponent', bien qu'il n'y ait pas d'espace dans le livre. L'insertion d'un espace (par exemple pickerView numberOfRowsInComponent) fait fonctionner UIPickerView, mais il est plein de points d'interrogation au lieu du contenu du tableau. Il semble que le livre a une faute de frappe.

+0

Veuillez nous montrer le code de votre méthode 'pickerView: titleForRow: forComponent:' ou 'pickerView: viewForRow: forComponent: réutilingView:' (selon la méthode que vous implémentez). –

Répondre

1

Juste pour clarifier pour tout le monde basé sur votre code d'origine ...

Votre espace méthode déléguée manquant:

- (NSInteger)pickerView:(UIPickerView *) pickerViewnumberOfRowsInComponent: ... 

devrait être:

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: ... 

Et votre autre méthode déléguée à gauche sur le nom de l'argument pickerView:

- (NSString *)pickerView:(UIPickerView *) titleForRow: ... 

devrait être:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow: ... 
0

Vous voulez ajouter ceci:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    return [activities objectAtIndex: row]; 
} 
+0

merci, c'est déjà là - voir la mise à jour avec le code. – roryok

0

Vous avez besoin d'un espace entre pickerView et numberOfRowsInComponent dans

(NSInteger) pickerView: (UIPickerView *) pickerViewnumberOfRowsInComponent: (NSInteger) composant

Malheureusement Ceci est une faute de frappe dans le livre, mais cela (avec d'autres erreurs) sont capturés sur la page Errata premier développement de l'iPhone Head (http://oreilly.com/catalog/errata.csp?isbn=9780596803544). Désolé pour le mal de tête et j'espère que vous appréciez le livre. - Dan

+0

Merci Dan, je l'ai trié. Le problème d'espace était le principal coupable, les points d'interrogation étaient une solution assez simple. Je ne peux pas vraiment me rappeler maintenant quel était le problème, mais il n'a pas fallu longtemps pour trier. Merci! – roryok

-1

Juste vu votre mise à jour - heureux que vous ayez trouvé le problème d'espace. En ce qui concerne les points d'interrogation, cela (évidemment) ne devrait pas se produire. Pouvez-vous poster le code où vous configurez le tableau des activités? - Dan