2010-12-01 3 views
1

Salut à tous, j'ai eu un problème bizarre ici
d'abord créer un petit projet pour essayer écriture dictionnaire plist
je déclarai un champ de texte et un bouton, ce qui est le code sur les IBAction:Pourquoi ne puis-je pas écrire Dictionary to plist?

NSArray *localPathsTemp = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *localDocPathTemp = [localPathsTemp objectAtIndex:0]; 
NSString *localFilePathTemp = [localDocPathTemp stringByAppendingPathComponent:@"InputPassword.plist"]; 
NSMutableDictionary *localDictreadTemp = [[NSMutableDictionary alloc] initWithContentsOfFile:localFilePathTemp]; 
NSMutableDictionary *localSerialNumber = [NSMutableDictionary dictionaryWithObject:setSN.text 
                       forKey:@"input_serial_number"]; 

J'essaie pour connecter ce que j'écris dans

NSLog(@"Local Dictionary : %@",[localDictreadTemp valueForKey:@"input_serial_number"]);//"input_serial_number=1" 
NSLog(@"Dictionary-localSerialNumber is %@",[localSerialNumber valueForKey:@"input_serial_number"]);//1(I enter 1 at textfield) 

Il est bien que je woks pense

Mais je propose tout ce à mon projet

J'ai obtenu un NULL

Voici le code dans mon projet d'origine (dans un alertview)

NSArray *localPathsTemp = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *localDocPathTemp = [localPathsTemp objectAtIndex:0]; 
NSString *localFilePathTemp = [localDocPathTemp stringByAppendingPathComponent:@"InputPassword.plist"]; 
NSMutableDictionary *localDictreadTemp = [[NSMutableDictionary alloc] initWithContentsOfFile:localFilePathTemp]; 
NSMutableDictionary *localSerialNumber = [NSMutableDictionary dictionaryWithObject:setLocalSerialNumber.text 
                         forKey:@"input_serial_number"]; 
[localDictreadTemp addEntriesFromDictionary:localSerialNumber]; 
[localDictreadTemp writeToFile:localFilePathTemp atomically:YES]; 


NSLog(@"Text in the textfield:%@",setLocalSerialNumber.text); 
NSLog(@"Local Dictionary %@",localSerialNumber);//"input_serial_number" = 1 
NSLog(@"Dictionary-LocalDictreadTemp %@",[localDictreadTemp valueForKey:@"input_serial_number"]);//NULL 

Le dernier résultat est NULL

C'est le problème que je ne peux pas comprendre out, j'ai une valeur à l'échantillon, mais ne fonctionne pas ici. Pourquoi ... ai-je donné un mauvais chemin de fichier ou ...?

Merci pour tous replys


Plus d'informations sur mon projet

Mon application est utilisé pour contrôler un périphérique matériel
Si l'utilisateur est la première fois à utiliser l'application
utilisateur doivent entrer le mot de passe et le numéro de série de l'appareil
L'appareil utilise bonjour pour rechercher l'appareil
Et obtenir un numéro de série/mot de passe par défaut f URL rom (ce cas est en WIFI)
URL ex.the est http://11.33.44.65/defaultsn_pwd.php

Je vais obtenir un fichier plist comme:

{ 
    sn = 1; 
    pwd = 777; 
} 

Ceci est l'utilisateur de l'information ne peut pas le voir.
Et l'application affichera un alertView avec deux textfields
Si le texte dans le champ de texte est la forme correspond sn/passwd URL
Il écrire.
Mais si !!! utilisateur dans l'environnement 3G, il se connecte à mon serveur pour commander le dispositif
Ceci est très différent avec Wifi, parce que vous devez donner au serveur un dispositif numéro de série

Alors

  1. Entrez le numéro de série (je dois WRI te dans le plist sur l'iphone, mais a obtenu le NULL ici)

  2. Prenez la série en tant qu'élément d'une nouvelle URL ex. http://server/defaultsn_pwd.php?sn = 1

Parce que je ne peux pas écrire le numéro de série dans plist, donc je ne peux pas obtenir une bonne URL
Mon URL aimera cette http://server/defaultsn_pwd.php? sn = NULL
Il plantera mon programme

C'est avery problèmes mortels, S'il vous plaît aidez-moi à comprendre ce problème sur ....

Je coincé dans ce problème trop longtemps ...

+1

existe-t-le chemin? LocalDictreadTemp est-il nul après initWithContentsOfFile? – Eiko

+0

Devrait fonctionner correctement. Quel genre de projet est-ce? Est-ce qu'il crée réellement le fichier? Pourriez-vous produire le journal de bord? – VdesmedT

+0

vérifiez la variable localFilePathTemp. var est autorelease peut être il libère – iOSPawan

Répondre

1
NSMutableDictionary *localDictreadTemp = [[NSMutableDictionary alloc] initWithContentsOfFile:localFilePathTemp]; 

Je pense que c'est la ligne de problème. Sauf si vous écrivez un fichier à cet emplacement ailleurs dans le code, il n'y a pas de fichier au localFilePathTemp. Puisque ce fichier est vide, votre initWithContentsOfFile retourne un dictionnaire nil, et le reste est une réaction en chaîne d'objets nuls.

essayez ceci:

if ([[NSFileManager defaultManager] fileExistsAtPath:localFilePathTemp]) { 
    NSLog(@"file exists at %@",localFilePathTemp); 
} else NSLog(@"Some dude from the internet solved my problem, I should probably go choose his answer"); 
+0

note de côté, par défaut le répertoire de documents sur l'iPhone est vide. Si vous incluez un fichier par défaut dans l'application, vous souhaiterez obtenir quelque chose en dehors du regroupement de ressources. '[[NSBundle mainBundle] pathForResource: @" filename "deType: @" plist "];' –

+0

Merci, essayez toujours de comprendre votre réponse –

+0

Je sais d'inclure un fichier plist dans l'application, Mais de cette façon, je ne peux que lire pas écrit/read.so je dois écrire une plist de cette façon ..... –

Questions connexes