开发者

Why can't I write Dictionary to plist?

Hey All,I got a weird problem here

First I create a small project to try write dictionary to plist

I declared a textfield and a button and this is code about IBAction:

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"];

I try to log what I write in

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)

It's woks fine as I think

But I move this whole to my project

I got a NULL

This is the code in my original project(in a 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

Last result is NULL

That's the problem I can't figure out,I got a value at sample ,but not work here .

Why...did I give a wrong file path or ... ?

Thanks for all replys


More开发者_如何转开发 information about my project

My application is use to control a hardware device

If the user is first time to use application

User have to enter the password and device serial number

The device is use bonjour to search the device

And get a default serial number/password from URL(this case is in WIFI)

ex.the URL is http://11.33.44.65/defaultsn_pwd.php

I will get a plist file like :

{
     sn  = 1; 
     pwd = 777;
}

This is the information user can't see it.

And the application will pop up an alertView with two textfields

If the text in the textfield is match the sn/pwd form URL

It will write in.

But !!!if user is in the 3G environment , It will connect to my server to control the device

This is very different with Wifi,because you have to give server a device serial number

So

  1. Enter the serial number(I need to write in plist on iphone,But got NULL here)

  2. Take the serial as a part of a new URL ex.http://server/defaultsn_pwd.php?sn=1

Because I can't write serial number in plist ,so I can't get a right URL

My URL will like this http://server/defaultsn_pwd.php?sn=NULL

It will crash my program

This is avery deadly issues ,Please help me to figure this problem out....

I trapped in this problem too long...


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

I betcha this is the problem line. Unless you are writing a file to that location elsewhere in code, there is no file at localFilePathTemp. Since that file is empty, your initWithContentsOfFile returns a nil dictionary, and the rest is a chain reaction of nil objects.

try this:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜