[RESOLU] NSIndexPath de longueur nulle ?
Philippe49
Membre
Je n'ai pas trouvé dans la doc NSIndexPath de communication sur ce que l'on obtient avec :
NSIndexPath * iP2=[NSIndexPath indexPathWithIndex:1];
NSIndexPath * iP3=[iP2 indexPathByRemovingLastIndex];
C'est-à -dire lorsque l'on prend un chemin de longueur 1 dont on supprime le dernier élément.
[size=12pt]Essai[/size]
[size=12pt]Execution[/size]
% gcc pgm.m -o pgm -framework Foundation
% pgm
2008-03-13 06:02:59.917 pgm[306:10b] <NSIndexPath 0x104c00> 0 indexes []
2008-03-13 06:02:59.919 pgm[306:10b] <NSIndexPath 0x105070> 1 indexes [1]
2008-03-13 06:02:59.919 pgm[306:10b] <NSIndexPath 0x104c00> 0 indexes []
2008-03-13 06:02:59.920 pgm[306:10b] <NSIndexPath 0x104c00> 0 indexes []
[size=12pt]Conclusion : [/size]
il semble que le résultat soit un indexPath spécial, de longueur nulle, qui reste invariant lorsqu'on lui retire des indices.
[size=12pt]The Question[/size]
Quelqu'un a-t-il des sources documentaires confirmant ceci ?
NSIndexPath * iP2=[NSIndexPath indexPathWithIndex:1];
NSIndexPath * iP3=[iP2 indexPathByRemovingLastIndex];
C'est-à -dire lorsque l'on prend un chemin de longueur 1 dont on supprime le dernier élément.
[size=12pt]Essai[/size]
#include <Foundation/Foundation.h><br /><br />int main(int argc, char**argv){<br /> NSAutoreleasePool * pool=[[NSAutoreleasePool alloc] init];<br /> NSIndexPath * iP1=[NSIndexPath indexPathWithIndexes:NULL length:0];<br /> NSLog(@"%@",iP1); <br /> NSIndexPath * iP2=[NSIndexPath indexPathWithIndex:1];<br /> NSIndexPath * iP3=[iP2 indexPathByRemovingLastIndex];<br /> NSLog(@"%@",iP2); <br /> NSLog(@"%@",iP3); <br /> NSIndexPath * iP4=[iP3 indexPathByRemovingLastIndex];<br /> NSLog(@"%@",iP4); <br /> [pool release];<br /> return 0;<br />}
[size=12pt]Execution[/size]
% gcc pgm.m -o pgm -framework Foundation
% pgm
2008-03-13 06:02:59.917 pgm[306:10b] <NSIndexPath 0x104c00> 0 indexes []
2008-03-13 06:02:59.919 pgm[306:10b] <NSIndexPath 0x105070> 1 indexes [1]
2008-03-13 06:02:59.919 pgm[306:10b] <NSIndexPath 0x104c00> 0 indexes []
2008-03-13 06:02:59.920 pgm[306:10b] <NSIndexPath 0x104c00> 0 indexes []
[size=12pt]Conclusion : [/size]
il semble que le résultat soit un indexPath spécial, de longueur nulle, qui reste invariant lorsqu'on lui retire des indices.
[size=12pt]The Question[/size]
Quelqu'un a-t-il des sources documentaires confirmant ceci ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Le comportement que j'ai observé me va tout à fait, mais ce qui me gêne c'est qu'Apple ne précise pas la règle du jeu.
Si tu prends un NSArray et que tu le vides, ça va te renvoyer un NSArray vide, pas nil.
C'est bien deux choses différentes que d'avoir un objet vide ou de ne pas avoir d'objet du tout.
Donc somme toutes c'est logique et c'est surtout que si ça retournais nil j'aurais plutôt assimilé ça à un bug.
Je voyais bien un non-dit dans tout cela, et effectivement l'exemple des collections NSArray, .. est sans doute le modèle sur lequel on peut se fier.Â
Après d'autres essais, NSIndexPath est basé sur un tableau de type C
 NSUInteger * _indexes
et quand on vide, l'indexPath de longueur nulle attribue NULL pour ce pointeur. Ceci n'empêche nullement l'enveloppe (l'objet NSIndexPath) de pointer sur un NSIndexPath bien réel.