2016-02-11 2 views
0

J'essaie de modifier les lignes du sélecteur après le chargement de la fenêtre. Le sélecteur a été créé dans le xml file mais lorsqu'une ligne a été essayée pour y être ajoutée, une erreur est générée (voir ci-dessous). Comment ajouter les rangées de sélecteurs une fois que le sélecteur est déjà ajouté?Modifier les lignes du sélecteur une fois la fenêtre chargée

view.xml

<!-- other parent views above --> 
<Picker id="languagePicker" selectionIndicator="true" useSpinner="true" 
            width="Ti.Platform.displayCaps.platformWidth" right="0"> 
</Picker> 

view.js

var languages = db.execute("SELECT * FROM language"); 

while(languages.isValidRow()){ 
    $.languagePicker.add(Ti.UI.createPickerRow({title:languages.fieldByName('language')})); 
    languages.next(); 
} 

Error Log:

[ERREUR] L'application a planté avec une exception non interceptée 'NSInvalidArgumentException'. Motif: - [NSNull rangeOfCharacterFromSet]: sélecteur non reconnu envoyé à 0x109f28af0 exemple Trace de la pile: 0 CoreFoundation 0x0000000109d03e4d exceptionPreprocess + 141 1 libobjc.A.dylib 0x00000001096d5deb objc_exception_throw + 48 2 CoreFoundation 0x0000000109d0c48d - [NSObject (NSObject) doesNotRecognizeSelector:] + 205 3 CoreFoundation 0x0000000109c5990a ___forwarding_ + 970 4 CoreFoundation 0x0000000109c594b8 _CF_forwarding_prep_0 + 120 5 UIKit 0x0000000106466d9c - [UILabel _contentInsetsFromFonts] + 137 6 UIKit 0x0000000106782a84 - [_ UILabelLayer updateContentInsets] + 127 7 UIKit 0x0000000106782b73 - [_ UILabelLayer updateContentLayerSize] + 50 8 UIKit 0x0000000106782ce1 - [_ UILabelLayer layoutSublayers] + 25 9 QuartzCore 0x000000010875fe70 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 10 QuartzCore 0x000000010875fcee _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 11 QuartzCore 0x0000000108754475 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 277 12 QuartzCore 0x0000000108781c0a _ZN2CA11Transaction6commitEv + 486 13 QuartzCore 0x000000010878237c _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 92 14 CoreFoundation 0x0000000109c2f367 CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSE RVER_CALLBACK_FUNCTION + 23 15 CoreFoundation 0x0000000109c2f2d7 __CFRunLoopDoObservers + 391 16 CoreFoundation 0x0000000109c24f2b __CFRunLoopRun + 1147 17 CoreFoundation 0x0000000109c24828 CFRunLoopRunSpecific + 488 18 GraphicsServices 0x000000010b04bad2 GSEventRunModal + 161 19 UIKit 0x00000001061f9610 UIApplicationMain + 171 20 ISTQB 0x0000000104320de6 principal + 310 21 libdyld. dylib 0x000000010a95192d démarrage + 1

+0

Que se passe si vous ne recevez pas de ligne? Si je le lis correctement, 'NSNull rangeOfCharacterFromSet' dit que vous ne récupérez pas une ligne. En outre, vous n'avez aucun gestionnaire d'erreurs sur cette boucle pour cette condition. Comme il est écrit, le code ignorera simplement l'instruction 'while' si' language' est vide. –

Répondre

0

Le procédé picker.add() attend un tableau de PickerRow objets.Cela fonctionne dans mon application:

var data = [], 
    picker = Ti.UI.createPicker(); 
data.push(
    Ti.UI.createPickerRow({ 
     title: 'Row 1' 
    })); 
data.push(
    Ti.UI.createPickerRow({ 
     title: 'Row2' 
    })); 
picker.add(data); 

Voir http://docs.appcelerator.com/platform/latest/#!/api/Titanium.UI.Picker-method-add

+0

J'ai accepté cette réponse car elle est correcte, mais n'était pas la solution à mon problème. Mon problème était que j'essayais d'ajouter les lignes une fois que la vue était déjà affichée, ce qui n'est pas possible. Les lignes TL; DR doivent être ajoutées avant l'affichage de la vue. – Nick

+0

Dans mon application, je crée dynamiquement le sélecteur et l'ajoute à l'ActionBar Android au besoin lorsque l'utilisateur change d'onglet. Je fais tout cela dans le code, plutôt que dans le XML. Basé sur l'erreur, je vois que vous travaillez sur iOS. Mais le point reste: faites-le en code JS plutôt qu'en XML et ça marchera. Retirez simplement le sélecteur de l'interface utilisateur, créez-en un nouveau et ajoutez-le à votre interface utilisateur avec les nouvelles lignes. – skypanther

+0

Oui, c'est vrai, la façon dont j'ai travaillé autour d'elle était de déplacer le code pour afficher la fenêtre sous le code qui a créé le contenu du sélecteur. – Nick