Afficher par programmation iPhone/iPad UDID
J'ai une application pour iPad dans lequel je reçois le dispositif de l'UDID par le code suivant dans la méthode viewDidLoad.
uid = [[UIDevice currentDevice] uniqueIdentifier];
uid = [uid stringByReplacingOccurrencesOfString:@"-" withString:@""];
J'ai voulu supprimer les tirets dans la chaîne.
Plus tard, dans un autre appel de méthode, j'essaie d'accéder à ce uid chaîne (qui est une propriété de cette classe),
NSLog("Loading request with UDID: %@", uid);
et je reçois le texte suivant dans la fenêtre de la console lorsque j'essaie d'imprimer.
Loading request with UDID: (
<WebView: 0x4b0fb90>
)
Pourquoi est-il l'impression de l'adresse de mémoire, au lieu de la chaîne elle-même? Merci!
Euh... l'UDID ne devriez pas avoir des tirets.
Cette première ligne de code renvoie une chaîne de caractères avec des tirets. Je le promets.
Sur le simulateur ou de l'appareil? Il me semble me rappeler que le simulateur est bizarre à ce sujet. Tous les appareils plaine-hex, minuscules avec leur udid.
Est-il Apple-légal d'utiliser uniqueIdentifier? Je pensais qu'ils ne voulaient pas les développeurs de l'enregistrement de ce.
UIID a des tirets, pas UDID.
Cette première ligne de code renvoie une chaîne de caractères avec des tirets. Je le promets.
Sur le simulateur ou de l'appareil? Il me semble me rappeler que le simulateur est bizarre à ce sujet. Tous les appareils plaine-hex, minuscules avec leur udid.
Est-il Apple-légal d'utiliser uniqueIdentifier? Je pensais qu'ils ne voulaient pas les développeurs de l'enregistrement de ce.
UIID a des tirets, pas UDID.
OriginalL'auteur Liam | 2010-07-29
Vous devez vous connecter pour publier un commentaire.
Le problème que vous rencontrez a à voir avec la gestion de la mémoire. J'ai eu exactement ce problème avant.
Lorsque vous NSLog l'uid, ce que vous obtenez est l'adresse d'une WebView objet. Pourquoi ce qui se passe quand uid est un NSString??? Permettez-moi de vous emmener dans un tour guidé de la magie de la gestion de la mémoire 😀
Lorsque vous définissez votre uid variable sur cette ligne:
Ce que vous avez fait a été d'attribuer une autoreleased variable, uid. Cela signifie qu'il va être libéré et que l'emplacement de la mémoire seront à gagner. Entre cette fonction et se terminant à la prochaine fois que vous accédez à lui, il a été libéré et quelque chose d'autre n'y sont stockées.
Comment voulez-vous résoudre ce problème? Lorsque vous affectez une chose à une propriété comme uid, TOUJOURS le faire par le setter créé par l' @déclaration de la propriété. Utiliser
self.uid = string
ou[self setUid:string
. Cela permettra de libérer correctement la vieille chaîne et conserver le nouveau.C'est un problème qui m'a coûté de NOMBREUSES heures à essayer de trouver la ligne problématique. Un autre symptôme qui peut arriver, c'est le programme plante lorsque vous essayez d'envoyer un message à un libéré de l'objet. Ceux-ci peuvent être TRÈS difficiles à dépister. Espérons que ma réponse vous aide et vous n'avez pas à supporter cette frustration 🙂
Bonne chance!
Dan, je ne pense pas que le problème ici. Autoreleased instances sortir avec leurs autorelease pool d'après le programme des feuilles de l'étendue dans laquelle l'instance a été créée. Donc, habituellement, il n'est pas nécessaire de conserver un objet qui n'est utilisé que localement dans une étendue donnée. Je crois que la raison pour @Liam est le problème de nacho4d de réponse.
OriginalL'auteur Dan Carter
NSLog("...") doivent être NSLog(@"...")
Hmmm, j'ai peut-être confondu moi-même avec un autre code de la chaîne de remplacement. Et oui, j'ai fait une erreur de frappe NSLog(@"...");
En fait, je viens de vérifier à nouveau. Il a des tirets.
OriginalL'auteur nacho4d
uniqueIdentifier
était deprecapted à partir de iOS 5.Vous devez utiliser une autre fonction:
OriginalL'auteur thanhzusu