setInteger / setObject
muqaddar
Administrateur
Salut,
Quand vous sauvegardez vos préférences, pour un entier, vous utilisez setInteger ou setObject ?
Y a t-il un intérêt avec setInteger plutôt que le terme générique ?
Quand vous sauvegardez vos préférences, pour un entier, vous utilisez setInteger ou setObject ?
Y a t-il un intérêt avec setInteger plutôt que le terme générique ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
setInteger prend en argument un int, qui est convertit en objet, puisque d'après la doc de setInteger:
Disons que si tu dispose d'un "int", en utilisant setInteger, tu écris un code plus court et plus lisible, puisque ce n'est pas toi qui fait la conversion en objet. La méthode est fournie parce qu'elle est pratique, et même si elle n'est pas indispensable, autant l'utiliser.
+
Chacha
Je sauvegarde un array dans mes prefs avec :
[prefs setObject:saveArray forKey:@prefsPluginsArray];
Ensuite je fais un NSLog sur la clé :
NSLog (@prefsPluginsArray : %@", [prefs objectForKey:@prefsPluginsArray]);
Qui me donne les bonnes valeurs :
[tt]prefsPluginsArray : <CFArray 0x3103c0 [0xa01900e0]>{type = mutable-small, count = 3, values = (
0 : <CFDictionary 0x310360 [0xa01900e0]>{type = mutable, count = 3, capacity = 17, pairs = (
0 : <CFString 0x3103f0 [0xa01900e0]>{contents = "id"} = <CFNumber 0x310230 [0xa01900e0]>{value = +0, type = kCFNumberSInt32Type}
9 : <CFString 0x3103b0 [0xa01900e0]>{contents = "state"} = <CFBoolean 0xa0190b90 [0xa01900e0]>{value = true}
17 : <CFString 0x310390 [0xa01900e0]>{contents = "name"} = <CFString 0x3103a0 [0xa01900e0]>{contents = "Mail"}
)}
1 : <CFDictionary 0x3104f0 [0xa01900e0]>{type = mutable, count = 3, capacity = 17, pairs = (
0 : <CFString 0x3103f0 [0xa01900e0]>{contents = "id"} = <CFNumber 0x3104e0 [0xa01900e0]>{value = +1, type = kCFNumberSInt64Type}
9 : <CFString 0x3103b0 [0xa01900e0]>{contents = "state"} = <CFBoolean 0xa0190b90 [0xa01900e0]>{value = false}
17 : <CFString 0x310390 [0xa01900e0]>{contents = "name"} = <CFString 0x3105e0 [0xa01900e0]>{contents = "Entourage"}
)}
2 : <CFDictionary 0x310610 [0xa01900e0]>{type = mutable, count = 3, capacity = 17, pairs = (
0 : <CFString 0x3103f0 [0xa01900e0]>{contents = "id"} = <CFNumber 0x310600 [0xa01900e0]>{value = +2, type = kCFNumberSInt64Type}
9 : <CFString 0x3103b0 [0xa01900e0]>{contents = "state"} = <CFBoolean 0xa0190b90 [0xa01900e0]>{value = true}
17 : <CFString 0x310390 [0xa01900e0]>{contents = "name"} = <CFString 0x310700 [0xa01900e0]>{contents = "iTunes"}
)}
)}
[/tt]
Mes booléennes sont bien bonnes pa rapport à ma table.
Sauf que ds le plist, elles restent toutes à true !
<key>prefsPluginsArray</key>
<array>
<dict>
<key>id</key>
<integer>0</integer>
<key>name</key>
<string>Mail</string>
<key>state</key>
<true/>
</dict>
<dict>
<key>id</key>
<integer>1</integer>
<key>name</key>
<string>Entourage</string>
<key>state</key>
<true/>
</dict>
<dict>
<key>id</key>
<integer>2</integer>
<key>name</key>
<string>iTunes</string>
<key>state</key>
<true/>
</dict>
</array>
Du moment que je fais un setObject, elles devraient écrite instantanément pourtant ! non ?
Les userDefault sont automatiquement et régulièrement synchronisées (valeur en mémoirs vs plist sur disque).
Si tu veux être certains d'avoir les mêmes valeurs de chaque coté à un instant t, tu dois appeler:
[mesPrefs synchronise];
EDIT : synchronize me fait planter la fenêtre des prefs...
Je récupère un integer de mes prefs avec [dict ObjectForKey].
Je veux le comparer à un entier : 0
En NSLog [dict ObjectForKey:@id] me donne bien ma valeur entière 0,1,2..etc
Mais impossible de le comparer :
if ([[dict ObjectForKey:@id] intValue]==0) marche pas.
if ([dict ObjectForKey:@id]==0) marche pas.
J'ai même essayé en créant un NSNumber et avec isEqualTo...
So what ?
Sinon, une de mes prefs, voire au dessus, fait tjs la rebelle, la coquine.
http://www.objective-cocoa.org/forum/index.php?topic=820.msg9519#msg9519
Excuse-moi pour le lapin d'il ya 5 minutes.