2010-07-25 2 views
0

Je reçois une nouvelle erreur intéressante avec iOS 4:New NSString substringWithRange: Message d'erreur

-[NSCFString substringWithRange:]: Invalid range {11, 4294967295}; this will become an exception for apps linked on SnowLeopard. Warning shown once per app execution.

L'erreur est causée par un extrait de code que je suis d'un billet de blog qui aide Titre du cas d'une chaîne, et ça ne va pas être difficile à réparer, mais je n'ai pas vu cela mentionné nulle part ailleurs, et je suppose qu'Apple veut que les gens arrêtent d'utiliser le numéro de magie 4294967295.

Quelqu'un connaît-il l'histoire/l'historique de ce changement?

EDIT: Source pour le titre Le code de cas est situé à: http://vengefulcow.com/titlecase/ C'est le port de l'objectif-c (évidemment). La ligne 116 est le délinquant. Il est clair que c'est un problème seulement dans certaines conditions spécifiques. Je suis toujours en train de le suivre.

+1

Pouvez-vous écrire un code? –

+1

Eh bien, 4294967295 est un nombre magique. C'est le nombre le plus élevé que vous pouvez obtenir avec 32 bits, et depuis Snow Leopards 64 ce n'est pas le cas. leur prenant probablement note de cela puisque l'iPhone est de 32 bits. –

+0

Votre gamme est trop grande, vous allez probablement dépasser 4294967295 et puis il vous donne une exception que vous ne pouvez pas faire sur iPhone. –

Répondre

1

Non signé 4294967295 est identique à la valeur uint32_t signée pour -1. J'ai vu des problèmes où une application 32 bits archivée -1 et une application 64 bits l'ont désarchivé en tant que Big Ass Longueur (terriblement amusant quand il était Xcode appelant malloc(4294967295) pendant la mise en place de 64 bits).

Les frameworks Cocoa détectent que vous avez passé dans une plage où la longueur est plus longue que la chaîne elle-même. Attention maintenant, avec des résultats tronqués, mais ce sera une erreur difficile dans le futur. (Dans certains cas, NSNotFound peut causer ce genre de problèmes).

+0

Oui, c'était le problème, et explique aussi la motivation pour le changement de la part d'Apple. Je vous remercie. – Steve